大家早上好,
我有四个类“字符”列表:
list1 <- c("hola1", "hola2", "hola3")
list2 <- c("hola1", "hola2", "hola4")
list3 <- c("hola2", "hola7", "hola8")
list4 <- c("hola1", "hola7", "hola8")
我想知道这些列表之间有多少项是共同的,比如维恩图,所以输出:
在list1和list2之间:hola1和hola2是常用名。 在list1和list3之间:hola2是一个通用名称。 在list1,list2和list4中:hola1是一个通用名称。
或换句话说,就像那样:
像这样的东西。你知道任何包装或方法吗?
提前致谢。
答案 0 :(得分:4)
您可以将intersect
与combn
结合使用。 intersect
查找常用元素,combn
将其应用于列表的所有1vs1组合:
l <- list(c("hola1", "hola2", "hola3"),
c("hola1", "hola2", "hola4"),
c("hola2", "hola7", "hola8"),
c("hola1", "hola7", "hola8"))
combn(length(l), 2, FUN=function(i)intersect(l[[i[1]]], l[[i[2]]]),
simplify=FALSE)
# [[1]]
# [1] "hola1" "hola2"
#[[2]]
#[1] "hola2"
#[[3]]
#[1] "hola1"
#[[4]]
#[1] "hola2"
#[[5]]
#[1] "hola1"
#[[6]]
#[1] "hola7" "hola8"
答案 1 :(得分:3)
您正在寻找intersect
:
> intersect( list1, list2 )
[1] "hola1" "hola2"