如何在R中按字符串前7位分组,按File列求和Number列数值
解决方法
这里提供两种常用的R实现方案,均能按String列前7个字符+File列分组,对Number列求和:
方法一:使用tidyverse/dplyr(推荐,代码更直观)
首先构造示例数据(你可以直接替换成自己的数据集):
df <- data.frame( row = 1:8, String = c("W123ABC-1", "W123ABC", "W123ABC-3; W123ABC-1; W123ABC", "S678DEF-2; S678DEF-3", "D345GHI", "D345GHI-5; D345GHI-8", "S678DEF; S678DEF-3; S678DEF-6", "S678DEF-4"), Number = c(9,4,11,3,4,7,12,1), File = c("F1","F1","F2","F3","F1","F1","F3","F2") )
然后执行分组求和:
library(dplyr) # 提取前7个字符作为分组键,再按分组键+File求和 result <- df %>% mutate(group_key = substr(String, start = 1, stop = 7)) %>% group_by(group_key, File) %>% summarise(total_number = sum(Number), .groups = "drop") # 查看结果 print(result)
输出结果会和你预期的一致:
group_key File total_number <chr> <chr> <dbl> 1 D345GHI F1 11 2 S678DEF F2 1 3 S678DEF F3 15 4 W123ABC F1 13 5 W123ABC F2 11
方法二:使用Base R(无需额外安装包)
如果不想加载dplyr包,可以用Base R的aggregate函数实现:
# 先添加分组键列 df$group_key <- substr(df$String, 1, 7) # 按group_key和File分组求和 result_base <- aggregate(Number ~ group_key + File, data = df, FUN = sum) # 查看结果 print(result_base)
关键说明
substr(String, 1, 7)是核心:不管原String列内容长短,直接提取前7个字符作为分组依据,完全忽略第7位之后的所有内容(包括分号分隔的多个字符串)。- 分组逻辑是前7位字符 + File的组合,确保同一前缀不同文件的数值分开求和。
内容的提问来源于stack exchange,提问作者nuenueke
相关产品推荐
相关产品推荐

