首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R用另一列和几个冒号

R用另一列和几个冒号
EN

Stack Overflow用户
提问于 2013-09-10 15:22:19
回答 1查看 144关注 0票数 1

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

代码语言:javascript
运行
复制
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)计算值列UPU、UPP或UPM为前三列(H3K27me3_gross_bin、H3K4me3_gross_bin、H3K4me1_gross_bin)中每列1的行数(前三列之和为万国邮联、UPP、UPM )

我想出了这样一种极其繁琐的方法:

代码语言:javascript
运行
复制
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]))

我证明有一种更优雅的方法可以做到这一点,可能是通过使用聚合()或ddply(),但是无法做到这一点。我会为你提供更有效的帮助。

提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-10 16:05:46

未测试:

代码语言:javascript
运行
复制
  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数据并提供预期的输出,我将测试上面的代码

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18722876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档