使用带有多个变量的lapply()

时间:2017-06-25 18:27:11

标签: r

我有一个交叉表频率表,其中度量是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)

1 个答案:

答案 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.maxx==max(x)等效(至少在此用途中)。