r - 确定 data.table 组成员的行索引

标签 r data.table

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 可以使用 .Ijdata.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/

相关文章:

R ggplot : Remove all space around plot

在R中进行POSIXlt转换期间删除时区

r - 如何在 STAN 中运行最大似然优化 (BFGS)?

r - 从世界发展指数数据中删除国家组

r - 如何检查 data.table 各行中的值是否相同

R 根据以前的列改变新列并动态命名它们

r - 通过其内存地址获取对象

r - 变量所有先验值的数学函数(例如,sd),按组

r - 在 R data.table 中连接具有相同(非键控)列名的表

r - 如何在具有多个键的数据表中进行完全外连接?