【问题标题】:Conditional Mean Statement Across Dataframe跨数据框的条件均值陈述
【发布时间】:2021-03-05 03:48:46
【问题描述】:

以下代码将返回以月份大于 6 为条件的平均值。

mean(df[df$delta1>6, "delta1"], na.rm=T)

现在,我该如何为数据框中的每一列应用这个?

df:

delta1      delta2      delta3
NA          2           3
4           NA          6
7           8           NA
10          NA          12
NA          14          15
16          NA          18
19          20          NA

【问题讨论】:

    标签: r conditional-statements lapply mean sapply


    【解决方案1】:

    apply-family 函数在这里很有用:

    sapply(df, function(x) mean(x[x>6], na.rm=T))
    

    【讨论】:

      【解决方案2】:

      我们可以将数据框中小于等于 6 的值设置为 NA,并使用 colMeans 计算平均值,忽略 NA 值。

      df[df <= 6] <- NA
      colMeans(df, na.rm = TRUE)
      
      #delta1 delta2 delta3 
      #    13     14     15 
      

      数据

      df <- structure(list(delta1 = c(NA, 4L, 7L, 10L, NA, 16L, 19L), delta2 = c(2L, 
      NA, 8L, NA, 14L, NA, 20L), delta3 = c(3L, 6L, NA, 12L, 15L, 18L, 
      NA)), class = "data.frame", row.names = c(NA, -7L))
      

      【讨论】:

      • 这太棒了!不过有一件事 - 我希望每一列都被调节。如果我取 delta1 的平均值,我想确保 delta1 值 > 6。如果我取 delta2 的平均值,我想确保 delta2 值 > 6。等等
      • 我明白了。对不起,我之前误解了这个问题。请参阅我认为应该可行的更新答案。
      猜你喜欢
      • 2012-09-15
      • 1970-01-01
      • 1970-01-01
      • 2018-08-04
      • 2017-03-06
      • 2018-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多