【问题标题】:Extract common names in multiple lists提取多个列表中的常用名称
【发布时间】:2014-04-02 09:47:24
【问题描述】:

大家早上好,

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

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

或者换句话说,类似的东西:

类似的东西。你知道获得这个的任何包或方法吗?

提前致谢。

【问题讨论】:

  • holaX 是什么?这些是list 类型吗?如果是这样,您是否要比较分配给它们的变量的名称?
  • 是的,正是…………
  • 你应该小心R中的“列表”这个词,因为有一个函数list()可以生成类列表的对象。你在这里描述的是一个字符向量。

标签: r


【解决方案1】:

您可以将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"

【讨论】:

    【解决方案2】:

    你在找intersect

    > intersect( list1, list2 )
    [1] "hola1" "hola2"
    

    【讨论】:

      【解决方案3】:

      首先将字符向量放在一个列表中。然后使用 Reduce() 和 intersect() 提取所有列表中的常用名称。

          x <- list(c("hola1", "hola2", "hola3"),
                    c("hola1", "hola2", "hola4"),
                    c("hola2", "hola7", "hola8"),
                    c("hola1", "hola7", "hola8"))
      
          Reduct(intersect, x)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-09
        • 2020-01-12
        • 2014-02-13
        相关资源
        最近更新 更多