如何在R中用summarise函数计算多列均值并生成指定列名?
如何在R中分组计算多列均值并输出指定列名
你可以通过两种方式实现需求,以下是修正后的完整代码:
方法1:逐个指定列名计算
适合列数较少的场景,清晰直观:
df <- read.csv("G:/Data.csv", header = T) df <- mutate(df, Date = dmy(Date), Month = month(Date), Year = year(Date)) df <- group_by(df, Year, Month) # 分别为每列计算均值,指定对应的输出列名 df <- summarise(df, T_avg_mean = mean(T_avg, na.rm = TRUE), T_max_mean = mean(T_max, na.rm = TRUE), T_min_mean = mean(T_min, na.rm = TRUE)) # 写入csv时去掉行名,避免生成额外的X列 write.csv(df, 'G:/Data_avg.csv', row.names = FALSE)
方法2:使用across批量处理
适合列数较多的场景,代码更简洁:
df <- read.csv("G:/Data.csv", header = T) df <- mutate(df, Date = dmy(Date), Month = month(Date), Year = year(Date)) df <- group_by(df, Year, Month) # 批量处理指定列,自动生成带_mean后缀的列名 df <- summarise(df, across(c(T_avg, T_max, T_min), ~mean(.x, na.rm = TRUE), .names = "{col}_mean")) write.csv(df, 'G:/Data_avg.csv', row.names = FALSE)
你之前尝试失败的原因:
- 第一种写法
mean(T_avg, T_max, T_min):mean()函数仅接受单个数值向量作为第一个参数,无法同时传入多列,因此会触发参数错误。 - 第二种写法重复使用
result = ...:在summarise中,重复的列名会被后续赋值覆盖,最终只会保留最后一个计算结果(即T_min的均值),无法得到三列数据。
注:添加na.rm = TRUE是为了忽略缺失值,避免因数据中存在NA导致均值计算结果为NA,可根据你的实际数据情况选择是否保留。
内容的提问来源于stack exchange,提问作者Alexia k Boston
相关产品推荐
相关产品推荐

