【发布时间】:2014-07-23 06:32:09
【问题描述】:
我有一个如下所示的 data.table:
V1 V2 V3 V4
4: ASW NA19704-200-37 SVLEN 0
5: ASW NA19834-200-37 SVLEN 0
301: YRI GS000017413 SVLEN 0
302: YRI GS000017898 SVLEN 0
303: YRI GS000018623 SVLEN 0
我在数据框中也有这个。我想对 V1 和 V3 具有相同值的所有列的 V4 求和。
V1 有 5 个值,V3 有 24 个,都是字符串,但我可以将它们转换为因子或其他任何值。
声明:
chr10pos53400000dt[chr10pos53400000dt$V3=="CDS",sum(V4),by=V1]
返回:
V1 V1
1: ASW 9
2: CEU 68
3: Lupus 109
4: RA 160
5: YRI 163
它应该返回什么。
只是现在,我希望对 V3 中的所有值执行此操作。为此,我通过命令ComponentList=unique(chr10pos53400000dt$V3) 创建了一个名为“ComponentList”的向量。
语句for (i in ComponentList) {ByComponent[i]<-chr10pos53400000dt[chr10pos53400000dt$V3==ComponentList[i],sum(V4),by=V1]}发出24条错误消息(与ComponentList的长度相同)说
24: In `[<-.data.frame`(`*tmp*`, i, value = structure(list( ... :
provided 2 variables to replace 1 variables
有谁知道我如何用上述结果填充一个新的数据框,但迭代?
非常感谢!
【问题讨论】:
-
我一定很困惑你想要什么......你不能把 v4 和
chr10pos53400000dt[,sum(V4),by=c("V1",V2","V3")]相加吗? -
呃,就是这么简单。我读了很多关于 data.table 的文章,我一定只是错过了你可以使用 by 来键入不止一件事的内容。我想我记得它说你只能在一列上建立索引。这就像一个魅力,并具有预期的效果。谢谢。
标签: r indexing dataframe data.table