match(x, y)
函数非常适合在向量x
的元素中搜索向量y
的元素。但是,y
是一个可能不同长度的向量列表时,做一个类似工作的有效而简单的方法是什么?
我的意思是结果应该是与x
长度相同的向量,而第i个元素应该是包含{{1的第i个元素的y
的第一个成员},或x
。
答案 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