You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 09:27:01