首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用data.table按组显示最大值对应的子集行数

使用data.table按组显示最大值对应的子集行数
EN

Stack Overflow用户
提问于 2013-05-16 04:03:53
回答 1查看 18.3K关注 0票数 66

假设我有一个包含一些棒球运动员的data.table

代码语言:javascript
复制
library(plyr)
library(data.table)

bdt <- as.data.table(baseball)

对于每个组(由玩家‘id’给出),我想选择与游戏'g‘的最大数量相对应的行。这在plyr中很简单

代码语言:javascript
复制
ddply(baseball, "id", subset, g == max(g))

data.table的等效代码是什么

我试过了:

代码语言:javascript
复制
setkey(bdt, "id") 
bdt[g == max(g)]  # only one row
bdt[g == max(g), by = id]  # Error: 'by' or 'keyby' is supplied but not j
bdt[, .SD[g == max(g)]] # only one row

这是可行的:

代码语言:javascript
复制
bdt[, .SD[g == max(g)], by = id] 

但它只比plyr快30%,这表明它可能还不是通用的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-16 04:16:05

下面是快速data.table的方法:

代码语言:javascript
复制
bdt[bdt[, .I[g == max(g)], by = id]$V1]

这避免了构造.SD,这是表达式中的瓶颈。

edit:实际上,OP很慢的主要原因不仅仅是它有.SD在里面,还有它以一种特殊的方式使用它的事实-通过调用[.data.table,这在当时有一个巨大的开销,所以在一个循环中运行它(当一个人做by的时候)积累了非常大的代价。

票数 83
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16573995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档