r用另一列求和

用户名

我有一个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]))

我是certian,有一种更优雅的方式可以执行此操作,可能是通过使用aggregate()或ddply(),但无法使此工作正常。我会更有效地帮助您

提前致谢

指标

未经测试:

  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))

PS如果您dput提供了数据并提供了预期的输出,我将测试上面的代码

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章