R 中的 data.table 包提供了以下选项:
which: ‘TRUE’ returns the integer row numbers of ‘x’ that ‘i’ matches to.
但是,我看不到在
j
内获得的方法,使用 by
建立的组中 'x' 的整数行号.例如,给定...
DT = data.table(x=rep(c("a","b","c"),each=3), y=c(1,3,6))
...我想知道每个 y 值的 DT 索引。
对我而言,值(value)在于我将 data.table 与另一个数据结构 (ADS) 并行使用,我打算根据有效计算的 data.table 分组对其执行分组计算。
例如,假设 ADS 是一个向量,DT 中的每一行都有一个值:
ADS<-sample(100,nrow(DT))
作为一种变通方法,如果我首先向 data.table 添加一个新的序列列,我可以计算由 DT$y 组确定的 ADS 的分组平均值。
DT[,seqNum:=seq_len(nrow(DT))]
DT[,mean(ADS[seqNum]),by=y]
这以添加新列为代价给出了我想要的结果。
我意识到在这个例子中我可以使用 tapply 得到相同的答案:
tapply(ADS,DT$y,mean)
但是,我将不会获得 data.tables 高效分组的性能优势(尤其是在对“by”列进行索引时)。
也许我忽略了一些语法???
也许这是添加到 data.table 的一个简单功能,我应该请求它(眨眼,眨眼)???
建议的语法:可选择将 '.which' 设置为组索引,允许写入:
DT[,mean(ADS[.which]),by=y,which=TRUE]
最佳答案
自 data.table
起可用1.8.3 可以使用 .I
在 j
的 data.table
按组获取行索引...
DT[ , list( yidx = list(.I) ) , by = y ]
# y yidx
#1: 1 1,4,7
#2: 3 2,5,8
#3: 6 3,6,9
关于r - 确定 data.table 组成员的行索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12411817/