【问题标题】:Calculate mean value of the same column depending on each all other columns根据所有其他列计算同一列的平均值
【发布时间】:2018-11-03 22:40:54
【问题描述】:

假设我有以下df

df <- structure(list(var1 = c(1, 0, 1, 0, 0 , 1 ), var2 = c(0, 
0, 0, 1, 1, 0), var99 = c(0, 1, 1, 1, 1, 0), value = c(154, 
120, 100, 180, 200, 460)), .Names = c("var1", "var2", "var99", "value" ), row.names = c(NA, -6L), class = "data.frame")

而我想实现这个输出数据:

structure(list(var = c("var1", "var2", "var99"), mean = c(238, 
190, 150)), .Names = c("var", "mean"), row.names = c(NA, -3L), class = 
"data.frame")

这是:获取每个其他列的“值”列的平均值:var1、var2、...、var99。在计算平均值时,只会考虑具有 1 的行。

我已经用 for 循环完成了:

l <- vector("list", 3)
for (i in 1:3)
l[[i]] <- mean(df$value[df[,i]==1], na.rm = T)
i <- i+1

谁能建议我在可能的情况下使用 Base R 省略循环的另一种方法?

【问题讨论】:

    标签: r performance for-loop apply mean


    【解决方案1】:
    sapply(df[, -4], weighted.mean, x=df[, 4])
    

    或者

    colSums(sweep(df[, -4], 1, df[, 4], `*`)) / colSums(df[, -4])
    

    【讨论】:

      【解决方案2】:

      或者:

      sapply(subset(df, select = -value), function(x) mean(df$value[x == 1]))
      

      【讨论】:

      • 会给机会的。也谢谢你!
      猜你喜欢
      • 2014-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-09
      • 1970-01-01
      • 2020-04-09
      相关资源
      最近更新 更多