识别 R 中字符向量列表中的重复项

bea*_*boy 4 r duplicates

我有一个像这样的字符向量列表:

my_list <- list(c('a','b','c','d','e'),c('e','f','g'),c('h','i','j'))
names(my_list) <- c("group1","group2","group3")
Run Code Online (Sandbox Code Playgroud)

我想要一种简单的方法来测试my_list列表中 3 个组/向量中任意一个的字母是否重复。例如,“e”同时出现在组 1 和组 2 中,因此这将是重复的。如果 2 个或更多组中至少有一个或多个重复项,那么任何简单的只返回逻辑值的操作都是理想的。因此,返回 FALSE 意味着每个组中的字母仅对该组而言是唯一的(显然,在我的示例中不是这种情况)。

非常感谢!

And*_*erg 6

可以生成二进制输出

any(duplicated(unlist(my_list)))
[1] TRUE
Run Code Online (Sandbox Code Playgroud)

正如 @sindri_baldur 在评论中正确指出的那样,如果重复项出现在组中,则应使用 处理(unique如果需要):

any(duplicated(unlist(lapply(my_list, unique))))
[1] TRUE
Run Code Online (Sandbox Code Playgroud)

或其他基本 R替代方案

anyDuplicated(unlist(lapply(my_list, unique))) > 1
[1] TRUE
Run Code Online (Sandbox Code Playgroud)


Ony*_*mbu 5

你可以这样做:

subset(stack(my_list), duplicated(values))$values
[1] "e"
Run Code Online (Sandbox Code Playgroud)

如果您需要判断一个组中的所有值对于该组是否是唯一的,您可以这样做:

result <- setNames(logical(length(my_list)), names(my_list))

result[unique(unlist(Filter(\(x)length(x)>1,
                            unstack(rev(stack(my_list))))))] <- TRUE
result
group1 group2 group3 
  TRUE   TRUE  FALSE 
Run Code Online (Sandbox Code Playgroud)

甚至:

stack(my_list) %>%
  mutate(dups = duplicated(values) | duplicated(values, f = T)) %>%
  group_by(ind) %>%
  summarise(logic = any(dups))

# A tibble: 3 x 2
  ind    logic
  <fct>  <lgl>
1 group1 TRUE 
2 group2 TRUE 
3 group3 FALSE
Run Code Online (Sandbox Code Playgroud)