选择并匹配R中列表中的多个向量

时间:2014-04-08 08:38:23

标签: r list vector

我有一个像这样的矢量列表:

>list

[[1]]

[1] "a" "m" "l" "s" "t" "o"

[[2]]

[1] "m" "y" "o" "t" "e"

[[3]]

[1] "n" "a" "s" 

[[4]]

[1] "b" "u" "z" "u" "l" "a"

[[5]]

[1] "c" "m" "u" "s" "r" "i" "x" "t"

1 - 首先,我想选择具有最多元素的表中的向量(在这种情况下,第5个向量具有8个元素)。这很容易。

2秒我希望选择列表中长度相等或立即低于前一个的所有向量,并将它们与前一个向量相交。

我的另一种可能性是选择第一个字符的名称。在这种情况下,这相当于选择以&#34开头的向量; a"或" b",列表中的第一个和第四个。在这种情况下,我不知道如何在列表中选择多个向量知道它们的第一个元素。

3 - 最后,我想保持只有最小匹配数的交集。

在这种情况下,列表中的四个向量,以" b"开头。然后再次为剩余的向量开始该过程,但是当"交叉时#34;已经考虑了第4和第5个向量。在这种情况下,将拾取第二个元素并将此元素与" unique()组合相交。第四和第五。

我希望我已经解释过了!有没有办法在R中做到这一点而没有3-4"对于"和"如果"循环?换句话说。是否有一种聪明的方法可以使用lapply或类似的方法来做到这一点?

1 个答案:

答案 0 :(得分:0)

应该这样做吗?

list <- strsplit(list("amlsto", "myote","nas","buzula","cmsusrixt"), "")
# find minimum length
lens <- sapply(list, length)
which.min(lens)
# which are same or 1 shorter than previous
inds <- which (lens==c(-1,head(lens, -1)) | lens==c(-1,head(lens,-1))-1)
# get the intersections
inters <- mapply(intersect, list[inds], list[inds-1], SIMPLIFY=FALSE)
#Get items where first in vector is in target set
target <- c("a","b")
isTarget <- sapply(list, "[[",1) %in% target

# Minimum number of overlaps
which.min(lapply(inters, length))