我可以从每个数据中找到共享元素的小列表。这里有一个简化的例子。
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]])
? 短小而整洁的东西。
只要使用你的列表,而不是列出它的子元素。
(shared <- Reduce(intersect, list.a))
# [1] "A" "B"
这里,是另一个选项 reduce
library(purrr)
library(dplyr)
list.a %>%
reduce(intersect)