match()到向量列表 - 可能有不同的长度

时间:2012-10-29 11:08:29

标签: r list vector match

match(x, y)函数非常适合在向量x的元素中搜索向量y的元素。但是,y是一个可能不同长度的向量列表时,做一个类似工作的有效而简单的方法是什么?

我的意思是结果应该是与x长度相同的向量,而第i个元素应该是包含{{1的第i个元素的y的第一个成员},或x

1 个答案:

答案 0 :(得分:3)

要找到x(第一个)的每个元素出现的y元素,请尝试:

## First, a reproducible example
set.seed(44)
x <- letters[1:25]
y <- replicate(4, list(sample(letters, 8)))
y
# [[1]]
# [1] "t" "h" "m" "n" "a" "d" "i" "b"
# 
# [[2]]
# [1] "c" "l" "z" "a" "s" "d" "i" "u"
# 
# [[3]]
# [1] "b" "k" "e" "g" "o" "i" "h" "j"
# 
# [[4]]
# [1] "g" "i" "f" "r" "h" "w" "l" "o"

## Find the element of y first containing the letters a-j
breaks <- c(0, cumsum(sapply(y, length))) + 1 
findInterval(match(x, unlist(y)), breaks)
# [1]  1  1  2  1  3  4  3  1  1  3  3  2  1  1  3 NA NA  4  2  1  2 NA  4 NA NA