[英]Cross-tabulation of shared elements between several vectors
我正在嘗試但未能在 R 中一次獲得多個向量之間相交中的元素數量:我有幾個不同長度的字符向量(唯一元素),並且想要獲得每對向量之間共享的元素數量。
本質上,這意味着類似於length(intersect(a,b))
,但重復多次/作為所有向量組合的交叉表。
我覺得這是一個簡單的案例,涉及apply()
家族之類的東西,但我似乎無法弄清楚... :-/
感謝您的任何建議!
您可以使用Reduce
; 這是一個最小的可重現示例
a1 <- 1:5
a2 <- 3:6
a3 <- 4:9
Reduce(intersect, list(a1, a2, a3))
#[1] 4 5
關鍵是將向量存儲在list
。
要獲得所有向量組合的交集,您可以執行以下操作:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.