【问题标题】:Creating a dataframe based on multiple columns of a data.frame or data.table基于 data.frame 或 data.table 的多列创建数据框
【发布时间】: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


【解决方案1】:

我想你只是想要这个:

chr10pos53400000dt[, sum(V4), by=list(V3, V1)]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多