如何在R中利用前缀字符向量按前缀分组生成行和新列
解决方案
可以结合dplyr的mutate、across,搭配purrr的map和命名展开来实现,完全符合你要求的管道工作流,且无需数据重塑:
library(dplyr) library(purrr) # 定义前缀向量 vec <- c("a", "b") # 管道操作生成求和列 dataset %>% mutate( !!!set_names( map(vec, ~rowSums(across(starts_with(.x)), na.rm = TRUE)), paste0(vec, "_sum") ) )
代码说明:
starts_with(.x):精准匹配以当前前缀开头的所有列,比matches更适合前缀匹配场景,避免误匹配rowSums(across(...)):对每行的目标列执行求和,na.rm = TRUE可处理可能存在的缺失值(根据需求可选)map(vec, ...):遍历前缀向量中的每个元素,生成对应列组的行求和结果set_names(..., paste0(vec, "_sum")):给每个求和结果向量命名为前缀_sum的格式!!!:将命名后的结果列表展开为mutate的多个参数,直接添加新列到原数据集中
测试输出:
运行上述代码后,你的数据集会生成a_sum和b_sum列,结果与你期望的完全一致:
a1 a2 b1 b2 a_sum b_sum 1 1 11 21 31 12 52 2 2 12 22 32 14 54 3 3 13 23 33 16 56 4 4 14 24 34 18 58 5 5 15 25 35 20 60 6 6 16 26 36 22 62 7 7 17 27 37 24 64 8 8 18 28 38 26 66 9 9 19 29 39 28 68 10 10 20 30 40 30 70
这个方法是向量化操作,处理大型数据集效率很高,同时保留所有无关列,完全满足你的需求。
内容的提问来源于stack exchange,提问作者Modern_ibex
相关产品推荐
相关产品推荐

