在R中的向量列表中查找所有相交的向量 [英] Find all intersecting vectors in a list of vectors in R

查看:15
本文介绍了在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆