【问题标题】:using lapply() with multiple variables使用带多个变量的 lapply()
【发布时间】:2017-06-25 18:27:10
【问题描述】:

我有一个交叉表频率表,其中度量是 CAG,列 A01、A02 等是频率计数。即 13 个 CAG 的 6485 个计数,CAG 14 的 35 个计数。 我想对每一列中的值求和,前提是该行的 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)

【问题讨论】:

  • 代码不运行。它是否应该演示它如何在一列中工作?或者这是您在多个专栏上的尝试?我建议对一列进行正确处理,目前尚不清楚模式是否应该始终用于 A01(这就是代码所做的)或者是否应该为每一列重新计算(这就是文本所暗示的。
  • 这是我在多个列上的尝试。对于一列: B = mode[1:1]]) prop

标签: r


【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    • 1970-01-01
    • 2020-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-10
    相关资源
    最近更新 更多