3

match(x, y)函数非常适合在 vectorx的元素中搜索 vector 的元素yy但是,当向量列表(长度可能不同)时,什么是完成类似工作的有效且简单的方法?

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

4

1 回答 1

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
于 2012-10-29T11:26:58.873 回答