【问题标题】:r sum several colmns by another columnr 将几列与另一列相加
【发布时间】:2013-09-10 15:22:19
【问题描述】:

我有一个 39 列(超过 100000 行)数据框,其最后十列看起来像这样(其余列与我的问题无关)

H3K27me3_gross_bin H3K4me3_gross_bin H3K4me1_gross_bin UtoP UtoM UPU UPP UPM UMU UMP UMM
cg00000029                  3                 3                 6    1    1   0   0   0   0   0   0
cg00000321                  6                 1                 5    1    0   0   1   0   0   0   0
cg00000363                  6                 1                 1    1    0   1   0   0   0   0   0
cg00000622                  1                 2                 1    0    0   0   0   0   0   0   0
cg00000714                  2                 5                 6    1    0   0   0   0   0   0   0
cg00000734                  2                 6                 2    0    0   0   0   0   0   0   0

我想创建一个矩阵:

a) 按前三列(H3K27me3_gross_bin、H3K4me3_gross_bin、H3K4me1_gross_bin)计算其中值列 UPU、UPP 或 UPM 为 1 的行数 b) 将 UPU、UPP、UPM 列的每一行与前三列相加

我想出了这个非常麻烦的方法:

UtoPFrac<-seq(6)
 UtoPTotEvents<-seq(6)
 for (j in 1:3){
  y<-df[,28+j]
  for (i in 1:3){
   UtoPFrac<-cbind(UtoPFrac,tapply(df[which(is.na(y)==FALSE),33+i],y[which(is.na(y)==FALSE)], function(x) length(which(x==1))))
}
}
UtoPFrac<-UtoPFrac[,2:10]
UtoPEvents<-cbind(rowSums(UtoPFrac[,1:3]),rowSums(UtoPFrac[,4:6]),rowSums(UtoPFrac[,7:9]))

我确信有一种更优雅的方法可以做到这一点,可能是通过使用 aggregate() 或 ddply(),但无法使其正常工作。 我会更有效地感谢任何帮助

提前致谢

【问题讨论】:

  • 如果你使用dputhead来发布你的data.frame会更好。看来您有 12 列和 11 个列名。
  • 不幸的是,目前尚不清楚您希望实现什么。您能否用所需的输出更新您的问题。

标签: r dataframe aggregate


【解决方案1】:

未测试:

  library(plyr)
  dpply(df,.(H3K27me3_gross_bin, H3K4me3_gross_bin, H3K4me1_gross_bin), summarize, UPUl=length(UPU[which(UPU==1)]),UPPl=length(UPP[which(UPP==1)]),UPMl=length(UPM[which(UPM==1)]), mysum=sum( UPU + UPP + UPM))

附:如果你dput数据并提供预期的输出,我会测试上面的代码

【讨论】:

    猜你喜欢
    • 2018-02-10
    • 1970-01-01
    • 2021-07-29
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    • 2013-05-14
    相关资源
    最近更新 更多