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

如何在R中按Col A聚合,合并去重排序字符串型数字序列?

在R中实现按列聚合并合并去重排序的方法

先明确数据情况:

原始数据

Col ACol b
a2,3,4,5
a3,5,6,7,8
b1,2,4
b3,5,7

我们需要按Col A分组,把每组Col b里的数字合并后去重、排序,得到下面的结果:

目标结果

Col ACol b
a2,3,4,5,6,7,8
b1,2,3,4,5,7

下面给两种可行的实现方式:

方式一:用tidyverse工具链(dplyr + stringr)

如果平时习惯用tidyverse生态,直接用这两个包就能搞定:

# 先加载需要的包
library(dplyr)
library(stringr)

# 构造原始数据框
df <- data.frame(
  Col_A = c("a", "a", "b", "b"),
  Col_b = c("2,3,4,5", "3,5,6,7,8", "1,2,4", "3,5,7"),
  stringsAsFactors = FALSE
)

# 分组处理
result_df <- df %>%
  group_by(Col_A) %>%
  summarise(
    Col_b = str_split(Col_b, ",") %>%  # 把每个字符串拆成列表
      unlist() %>%                     # 展开成单个元素的向量
      unique() %>%                     # 去重
      sort() %>%                       # 按数字顺序排序
      str_c(collapse = ",")            # 重新拼成逗号分隔的字符串
  )

# 输出结果
print(result_df)

方式二:用Base R实现(无需额外装包)

如果不想加载第三方包,直接用Base R的aggregate函数配合自定义处理逻辑:

# 构造原始数据框
df <- data.frame(
  Col_A = c("a", "a", "b", "b"),
  Col_b = c("2,3,4,5", "3,5,6,7,8", "1,2,4", "3,5,7"),
  stringsAsFactors = FALSE
)

# 自定义处理函数:负责拆分、去重、排序、拼接
process_col <- function(x) {
  elements <- unlist(strsplit(x, ","))  # 拆分字符串成向量
  sorted_unique <- sort(unique(elements))  # 去重并排序
  paste(sorted_unique, collapse = ",")  # 拼回字符串
}

# 按Col_A聚合,用自定义函数处理Col_b
result_df <- aggregate(Col_b ~ Col_A, data = df, FUN = process_col)

# 查看结果
print(result_df)

两种方法都能得到和目标一致的结果,按需选择即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 06:35:17