我有一个交叉表频率表,其中度量是CAG,列A01,A02等是频率计数。即64个计数的13个CAG,35个计数的CAG 14。 我想对每列中的值求和,前提是该行的CAG大于或等于模态CAG值。然后我将它除以A01的总和。这为我提供了大于或等于模式的值的比例。 我已经设法让它在一个列上运行,但是我想在每个列上运行它,使用每列的相关模式。我很感激任何帮助!
data <- data.frame(CAG = c(13, 14, 15, 17),
A01 = c(6485,35,132, 12),
A02 = c(0,42,56, 4))
mode <- data$CAG[data$A01 == max(data$A01)]
B <- lapply(data[, 2:ncol(data)], function(x) {
sum(x[data$CAG >= mode])
})
prop <- B / sum(data$A01)
答案 0 :(得分:1)
您还需要将模式计算放在函数中。
sapply(data[, 2:ncol(data)], function(x) {
mode <- data$CAG[which.max(x)]
B <- sum(x[data$CAG >= mode])
B/sum(x)
})
## A01 A02
## 1.0000000 0.5882353
函数which.max
与x==max(x)
等效(至少在此用途中)。