在R中的向量列表中查找所有相交的向量 [英] Find all intersecting vectors in a list of vectors in R
本文介绍了在R中的向量列表中查找所有相交的向量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个矢量列表sets
,如下所示。
sets <- list(b = c("b4", "b5", "b6"),
c = c("c2", "c3", "b4", "b5", "c6"),
d = c("d1", "d2"),
e = c("e45", "e55", "e65"),
f = c("f4", "f5", "d1", "f6"),
g = c("g1", "g2"),
h = c("h5", "h6", "h7"),
i = c("i9", "h5", "g1", "h6", "i8", "i7"),
j = c("j1", "j2", "j3"))
我要标识此列表中所有唯一的元素,以及所有重叠/相交的元素。
如何在R中执行此操作?
unique <- list(e = c("e45", "e55", "e65"),
j = c("j1", "j2", "j3"))
intersects <- list(d = c("d1", "d2"),
b = c("b4", "b5", "b6"),
c = c("c2", "c3", "b4", "b5", "c6"),
f = c("f4", "f5", "d1", "f6"),
g = c("g1", "g2"),
h = c("h5", "h6", "h7"),
i = c("i9", "h5", "g1", "h6", "i8", "i7"))
推荐答案
假设列表元素应按:
进行分区- 列出交叉点为空的元素w.r.t.所有其他列表组件
- 列出具有非空交叉点w.r.t.的元素。一些其他列表组件,
在基数R中实现这一点的方法如下:
## find set components w/ empty intersections w/ all other components
isUnique <- sapply(seq_along(sets), function(i) length(intersect(sets[[i]], unlist(sets[-i]))) < 1)
## empty intersect components
sets[isUnique]
#> $e
#> [1] "e45" "e55" "e65"
#>
#> $j
#> [1] "j1" "j2" "j3"
## non-empty intersect components
sets[!isUnique]
#> $b
#> [1] "b4" "b5" "b6"
#>
#> $c
#> [1] "c2" "c3" "b4" "b5" "c6"
#>
#> $d
#> [1] "d1" "d2"
#>
#> $f
#> [1] "f4" "f5" "d1" "f6"
#>
#> $g
#> [1] "g1" "g2"
#>
#> $h
#> [1] "h5" "h6" "h7"
#>
#> $i
#> [1] "i9" "h5" "g1" "h6" "i8" "i7"
这篇关于在R中的向量列表中查找所有相交的向量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文