首页 > 解决方案 > R中的条件统计(首选dplyr解决方案)

问题描述

我有以下数据框:

df <- data.frame("num1" = 1:3, "num2" = 4:6, "num3" = c(NA, 10, 12), stringsAsFactors = FALSE)
  num1 num2 num3
    1    4   NA
    2    5   10
    3    6   12

有没有办法有条件地使用每列的平均值生成汇总表?详细地说,如果数据框中的一列包含空值,则na.exclude该空值并计算平均值:(10 + 12) /2 = 11。如果一列没有任何空值,则只需计算平均值:例如(1 + 2 + 3) / 3 = 2num1列。

期望的输出:

  mean_num1   mean_num2   mean_num3
     2             5          11

标签: rdplyr

解决方案


您可以使用“应用”函数、mean() 函数和“na.rm=TRUE”参数遍历所有列。

就像是

sapply(df, mean, na.rm=TRUE)

num1 num2 num3 
   2    5   11 

然后你可以随意重命名向量:

names(mean_col)<-paste0('mean_', names(mean_col))

mean_num1 mean_num2 mean_num3 
        2         5        11 

使用 dplyr:

df%>%summarize(across(everything(), mean, na.rm=TRUE, .names = "mean_{col}"))

编辑

或者最简单的,使用colMeans()

colMeans(df, na.rm=TRUE)

推荐阅读