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

在R语言中基于分组列提取多列逗号分隔值的唯一值

按分组汇总多列中的唯一动物

原始数据集

group     X                 Y                   Z
A         cat, dog          dog, fox        
A         fox, chicken      dog, fox, chicken
A
B         fox, dog 
B         fox
B                                               bunny

需求

按group列分组,汇总X、Y、Z三列中的所有唯一动物,得到如下结果:

group     animal
A         cat, dog, fox, chicken
B         bunny, dog, fox

动物顺序无关,只要是唯一值即可。

尝试过的错误方法

  1. 仅处理单列时产生大量NA:
df %>%  
group_by(group) %>% 
separate_rows("X", sep=",")   %>%  
distinct %>%    
summarise(X = toString(X)) 
  1. 仅适用于数值变量,无法处理当前场景:
df %>%   group_by(group) %>%   summarise_at(vars("X","Y","Z"), sum)

正确实现方法

可以结合tidyr的pivot_longer将多列转为长格式,再统一处理逗号分隔值,最后去重汇总:

library(dplyr)
library(tidyr)

df %>%
  pivot_longer(cols = c(X, Y, Z), names_to = "col", values_to = "animal") %>%
  separate_rows(animal, sep = ",\\s*") %>%  # 匹配逗号及后续空格,避免拆分出带空格的动物名
  filter(!is.na(animal), animal != "") %>%  # 过滤空值与NA
  group_by(group) %>%
  distinct(animal) %>%
  summarise(animal = toString(animal))

代码说明

  • pivot_longer:将X/Y/Z三列合并为单列,统一处理所有动物值
  • separate_rows:把每个单元格内的逗号分隔值拆分为单独行
  • filter:清除无效的空值和NA,避免干扰结果
  • distinct(animal):在分组内保留唯一的动物条目
  • summarise:将分组内的唯一动物用逗号连接为字符串

内容的提问来源于stack exchange,提问作者Gabriel G.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 22:46:06