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

如何用mutate()和mean()计算向量指定列名的行平均值?

如何通过指定列名列表计算行内平均值生成综合得分?

你需要基于给定的列名列表item_names,计算每行中对应列的平均值作为综合得分,之前的写法无法正常运行是因为在rowwise()环境里直接引用了整列数据,而非当前行的对应值。下面是两种可行的解决方案:

方案1:使用c_across() + all_of()(适配rowwise())

在dplyr的rowwise()上下文里,c_across()可以提取当前行指定列的数值,搭配all_of()来引用外部定义的列名向量:

item_names = c("item1", "item2")

dat = dat %>% 
  rowwise() %>% 
  mutate(composite_score = mean(c_across(all_of(item_names)), na.rm = TRUE)) %>%
  ungroup() # 建议取消分组,避免后续操作受rowwise影响
  • all_of()确保正确识别外部的列名字符向量,避免列名不存在时的语法错误
  • na.rm = TRUE用于忽略缺失值,可根据你的数据情况选择是否保留

方案2:使用rowMeans() + across()(更高效,无需rowwise())

如果你的数据集较大,推荐这种不需要rowwise()的写法,计算效率更高:

item_names = c("item1", "item2")

dat = dat %>% 
  mutate(composite_score = rowMeans(across(all_of(item_names)), na.rm = TRUE))

across()选中指定列后,rowMeans()直接对每行计算均值,省去了rowwise()的分组开销。

原代码失效原因

你之前写的mean(df[, names(df) %in% item_names])会直接提取整个数据集的指定列(所有行的数据),而不是当前行的数值,所以mean()计算的是整个列的均值,而非每行的行内均值,不符合需求。

内容的提问来源于stack exchange,提问作者Nick Khaligh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 07:27:02