1

最後の10列がそのように見える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) 最初の 3 つの列 (H3K27me3_gross_bin、H3K4me3_gross_bin、H3K4me1_gross_bin) のそれぞれによって、値列 UPU、UPP、または UPM が 1 である行の数をカウントします b) 列 UPU、UPP、UPM の各行を最初の 3 つによって合計します列

私はこれを行うためのこの信じられないほど面倒な方法を思いつきました:

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()を使用して、これを行うよりエレガントな方法があると確信していますが、これを機能させることができませんでした。これをより効率的に行うための助けに感謝します

前もって感謝します

4

1 に答える 1