我有兩個長串列,其中一個是另一個的連續子集。例子:
full= c("cat", "dog", "giraffe", "gorilla", "opossum", "rat")
subset= c("giraffe", "gorilla", "opossum")
有沒有一種優雅的方法來獲取匹配開始、結束或兩者的索引?在上面的例子中,我想得到3,因為它是全文中“長頸鹿”的索引?
澄清一下,如果subset= c("giraffe", "rat", "gorilla", "opossum")
輸出應該是NA。
uj5u.com熱心網友回復:
zoo::rollapply(full, 3, FUN = identical, subset)
# [1] FALSE FALSE TRUE FALSE
which(zoo::rollapply(full, 3, FUN = identical, subset))[1]
# [1] 3
zoo::rollapply(full, 3, FUN = func, c("giraffe", "rat", "gorilla", "opossum"))
# [1] FALSE FALSE FALSE FALSE
which(zoo::rollapply(full, 3, FUN = identical, c("giraffe", "rat", "gorilla", "opossum")))[1]
# [1] NA
uj5u.com熱心網友回復:
我們可能需要match有條件
f1 <- function(subvec, fullvec) {
i1 <- match(subvec, fullvec, nomatch = 0)
if(any(diff(i1) != 1)) NA else i1[1]
}
-測驗
> f1(subset, full)
[1] 3
> f1(subset2, full)
[1] NA
> f1(subset[c(1, 3)], full)
[1] NA
資料
full <- c("cat", "dog", "giraffe", "gorilla", "opossum", "rat")
subset <- c("giraffe", "gorilla", "opossum")
subset2 <- c("giraffe", "rat", "gorilla", "opossum")
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/311465.html
上一篇:列印出帶有條件串列的字典
