【问题标题】:Cross-tabulation of shared elements between several vectors几个向量之间共享元素的交叉表
【发布时间】:2020-03-10 23:39:51
【问题描述】:

我正在尝试并未能在 R 中一次获取多个向量之间相交的元素数量:我有几个不同长度的字符向量(唯一元素),并且想要获取每对之间共享的元素数量的向量。

本质上,这意味着类似于length(intersect(a,b)),但重复了几次/作为所有向量组合的交叉列表。

我觉得这是一个涉及apply() 家庭之类的简单案例,但我似乎无法弄清楚... :-/

感谢您的任何建议!

【问题讨论】:

标签: r set intersection


【解决方案1】:

要获得所有向量组合的交集,您可以这样做:

l <- list(a1 = 1:5, a2 = 3:6, a3 = 4:9)

intsct_list <- combn(seq_along(l), 2, function(x) intersect(l[[x[1]]], l[[x[2]]]), simplify = FALSE)

names(intsct_list) <- combn(names(l), 2, paste0, collapse = "")

lengths(intsct_list)  

a1a2 a1a3 a2a3 
   3    2    3 

【讨论】:

  • 非常感谢;这正是我想要的! (抱歉,这么晚才回复!)
【解决方案2】:

您可以使用Reduce;这是一个最小的可重现示例

a1 <- 1:5
a2 <- 3:6
a3 <- 4:9

Reduce(intersect, list(a1, a2, a3))
#[1] 4 5

关键是将向量存储在list中。

【讨论】:

  • 非常感谢!我已经尝试过 Reduce 函数,但无法让 length 函数起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-29
  • 2020-08-14
  • 1970-01-01
  • 2011-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多