首页 > 解决方案 > a,根据字符向量中的元素删除重复项

问题描述

我有这样的数据框,它包含 3 个或更多由逗号 (,) 分隔的字符,如果它包含相同的字符,我想删除该行。

x <-c(1,2,3,4,5)
y <-c("a,a,a","a,a,b,c","b,c,a","b,b,b,b","a,b,b,c")
df<-data.frame(x,y)

所需的输出是

x <-c(2,3,5)
y <-c("a,a,b,c","b,c,a","a,b,b,c")
df<-data.frame(x,y)

标签: rdplyr

解决方案


您可以使用separate_rows将逗号分隔的值拆分为不同的行,删除只有 1 个不同值的组并再次汇总数据。

library(dplyr)

df %>%
  tidyr::separate_rows(y) %>%
  group_by(x) %>%
  filter(n_distinct(y) > 1) %>%
  summarise(y = toString(y))

#      x y      
#  <dbl> <chr>  
#1     2 a, b, c
#2     3 b, c, a
#3     5 a, b, c

在基础 R 中:

df[sapply(strsplit(df$y, ','), function(x) length(unique(x))) > 1, ]

推荐阅读