【发布时间】:2012-09-06 20:51:15
【问题描述】:
R中的data.table包提供了选项:
其中:‘TRUE’返回‘i’的‘x’的整数行号 匹配到。
但是,我看不到在j 中获取使用by 建立的组中“x”的整数行号的方法。
例如,给定...
DT = data.table(x=rep(c("a","b","c"),each=3), y=c(1,3,6))
...我想知道 DT 中每个 y 值的索引。
对我而言,价值在于我正在使用与另一个数据结构 (ADS) 并行的 data.table,我打算根据 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]
【问题讨论】:
-
恐怕我没跟上。你能举一个你想在 ADS 和 DT 之间执行的计算的例子吗?
-
蓝色,我确实给出了一个工作示例......我的最后一行代码是使用来自 DT 的索引计算 ADS 中的分组平均值。在我的 real 应用程序中,ADS 数据结构不是一个向量,而是一个“GenomicRanges”对象,我的 DT 是关于范围的元数据。无论如何,下面的 Josh 和 Matthew 都在“处理此案”。谢谢!
标签: r data.table