R语言如何为数据透视表dataframe新增均值行 仅对数值列求均值
解决方案
你可以使用dplyr的across()语法实现不同类型列的差异化处理,生成均值行后直接绑定即可,代码如下:
# 你原有预处理代码运行得到df2后,执行以下代码即可 df_result <- df2 %>% rbind( summarise(., # 非数值列手动赋值为指定字符 year = "mean", # 自动匹配所有数值列计算均值 across(where(is.numeric), mean, na.rm = TRUE) ) )
代码说明
across(where(is.numeric), mean)会自动筛选所有数值型列计算均值,不会干扰字符类型的year字段- 手动指定
year = "mean",刚好满足你对非数值列的标注需求 - 增加
na.rm = TRUE是兼容处理场景,避免部分列存在空值时均值计算返回NA的问题,你的示例数据无空值可省略该参数
如果你使用的dplyr版本低于1.0.0,不支持across语法,也可以用基础R的写法实现:
# 提取所有数值列计算均值 num_cols <- sapply(df2, is.numeric) mean_vals <- colMeans(df2[, num_cols], na.rm = TRUE) # 拼接均值行 mean_row <- c(data.frame(year = "mean"), as.list(mean_vals)) df_result <- rbind(df2, mean_row)
运行上述任意一种方法得到的结果,都和你给出的预期输出完全一致。
内容的提问来源于stack exchange,提问作者Macosso
相关产品推荐
相关产品推荐

