基于给定元素从列表中提取向量

时间:2017-10-05 09:48:39

标签: r

假设我有向量v包含6个元素和一个带有多个向量的列表,每个向量有两个元素,列表是从矩阵m生成的,如下所示:

v<-c(1,2,3,4,5,6)

m = matrix( c(1, 2, 10 , 2, 1, 3, 8 ,9,4,6,3,1,9,11,4,7,12,3,2,5),  ncol=2, byrow = TRUE) 

l <-tapply(m,rep(1:nrow(m),ncol(m)),function(i)i)
>  l
$`1`
[1] 1 2

$`2`
[1] 10  2

$`3`
[1] 1 3

$`4`
[1] 8 9

$`5`
[1] 4 6

$`6`
[1] 3 1

$`7`
[1]  9 11

$`8`
[1] 4 7

$`9`
[1] 12  3

$`10`
[1] 2 5

从列表l,我想只保留v

中包含两个元素的向量

结果类似于:

>  R
 $`1`
 [1] 1 2

 $`2`
 [1] 1 3

 $`3`
 [1] 4 6

 $`4`
 [1] 3 1

 $`5`
 [1] 2 5 

原始列表有18835个向量。

2 个答案:

答案 0 :(得分:0)

这里我们使用sapplysimplify=T来制作一个布尔向量,我们可以将其用于子集l。我所做的假设是每个列表都有两个元素,但可以通过稍加编辑将sum更改为all来轻松更改。

l[sapply(l,function(x){sum(x %in% v)==2},simplify = T)]

答案 1 :(得分:0)

我们可以使用sapply检查x中是否存在v中的所有元素,假设每个列表元素中只有2个元素。

l[sapply(l, function(x) all(x %in% v))]


#$`1`
#[1] 1 2

#$`3`
#[1] 1 3

#$`5`
#[1] 4 6

#$`6`
#[1] 3 1

#$`10`
#[1] 2 5