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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 11:21:32