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

如何在R中按行求和另一列指定的子集列?

解决R语言中按行指定列名求和的问题

针对你遇到的需求——根据每行columns_to_sum列指定的列名计算对应数值之和,这里提供几种实用的解决方法:

方法1:使用dplyr的rowwise+across组合

这是tidyverse生态下最直观的写法,按行处理每行的列名解析与求和:

library(dplyr)

df <- df %>%
  rowwise() %>%
  mutate(result_column = sum(across(all_of(strsplit(columns_to_sum, ", ")[[1]])))) %>%
  ungroup()
  • rowwise():让后续的mutate操作按行独立执行
  • strsplit(columns_to_sum, ", ")[[1]]:将每行的列名字符串拆分为列名向量
  • all_of():用于引用动态生成的列名,避免列名匹配警告
  • across():选中指定列后求和

方法2:使用purrr逐行映射处理

如果需要更灵活的行级操作,可以结合purrr的map函数:

library(dplyr)
library(purrr)

df <- df %>%
  mutate(result_column = map_dbl(columns_to_sum, ~{
    # 拆分当前行的列名字符串
    target_cols <- strsplit(.x, ", ")[[1]]
    # 提取当前行对应列的数值并求和
    sum(select(df, all_of(target_cols))[cur_row(), ])
  }))
  • map_dbl():遍历columns_to_sum的每个元素,返回数值型结果向量
  • cur_row():在mutate中标记当前处理的行位置

方法3:基础R原生实现

如果不想加载额外包,用基础R的apply函数就能完成:

df$result_column <- apply(df, 1, function(row_data) {
  # 拆分列名字符串
  target_cols <- strsplit(row_data["columns_to_sum"], ", ")[[1]]
  # 提取对应列的数值并求和(注意转换为数值型)
  sum(as.numeric(row_data[target_cols]))
})
  • apply(df, 1, ...):按行遍历数据框的每一行
  • as.numeric():确保提取的列值转换为数值类型(避免因子类型导致错误)

注意事项

如果你的实际数据中columns_to_sum的列名分隔符不固定(比如有的是","没有空格),可以把strsplit的分隔符改为"\\s*,\\s*",这样能匹配任意数量的空格:

strsplit(.x, "\\s*,\\s*")[[1]]

运行上述任意一种方法后,都能得到你预期的结果数据框。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 20:10:27