У меня есть 39 колонки (с вверх 100000 строк) кадра данных, чьи последние десять столбцов выглядит следующим образом (остальные столбцы не касаются моего вопроса)г сумма несколько colmns по другой колонке
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
Я хочу, чтобы создать матрицу, которая будет:
а) подсчитать количество строк, в которых значение колонки ВПС, УПП или UPM равна 1 по каждой из первых трех столбцов (H3K27me3_gross_bin, H3K4me3_gross_bin, H3K4me1_gross_bin) б) сумма каждый ряд столбцов ВПС, УПП, УПМ по первым трем столбцам
я придумал эту невероятно громоздкий способ сделать это:
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 есть более Elegent способ сделать это, вероятно, с помощью агрегата() или ddply(), но не смог получить это работает. я apprciate помощь делает это более efficenly
Спасибо заранее
Было бы лучше, если бы вы использовали 'dput' и' head' для размещения вашего data.frame. Похоже, что у вас есть 12 столбцов и 11 имен столбцов. – harkmug
К сожалению, неясно, чего вы хотите достичь. Не могли бы вы обновить свой вопрос с требуемым выходом. – Henrik