在多个列表中提取常用名称

时间:2014-04-02 09:47:24

标签: r

大家早上好,

我有四个类“字符”列表:

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是一个通用名称。

或换句话说,就像那样:

enter image description here

像这样的东西。你知道任何包装或方法吗?

提前致谢。

2 个答案:

答案 0 :(得分:4)

您可以将intersectcombn结合使用。 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"