如何在R中按Col A聚合,合并去重排序字符串型数字序列?
在R中实现按列聚合并合并去重排序的方法
先明确数据情况:
原始数据
| Col A | Col b |
|---|---|
| a | 2,3,4,5 |
| a | 3,5,6,7,8 |
| b | 1,2,4 |
| b | 3,5,7 |
我们需要按Col A分组,把每组Col b里的数字合并后去重、排序,得到下面的结果:
目标结果
| Col A | Col b |
|---|---|
| a | 2,3,4,5,6,7,8 |
| b | 1,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
相关产品推荐
相关产品推荐

