查找列表中的共享元素

问题描述 投票:0回答:1

我可以从每个数据中找到共享元素的小列表。这里有一个简化的例子。

data_1 <- c("A","B")
data_2 <- c("A","B","C")
data_3 <- c("A","B","C","D")
data_4 <- c("A","B","F","N")

list.a <- list(data_1,data_2,data_3,data_4)

# find common elements
shared <- Reduce(intersect, list(list.a[[1]], list.a[[2]], list.a[[3]]), list.a[[4]]))  

# outputs
print(shared)                 
[1] "A" "B"           

但实际工作中的问题是: 列表真的很大,比如说它包含100个数据,那么这种方法的效率就不高了,而且可能会引入错误。有没有一种方法可以避免把所有的数据都列出来呢?list(list.a[[1]], list.a[[2]], list.a[[3]]), list.a[[4]])? 短小而整洁的东西。

r
1个回答
1
投票

只要使用你的列表,而不是列出它的子元素。

(shared <- Reduce(intersect, list.a))
# [1] "A" "B"

0
投票

这里,是另一个选项 reduce

library(purrr)
library(dplyr)
list.a %>%
      reduce(intersect)
© www.soinside.com 2019 - 2024. All rights reserved.