gpt4 book ai didi

r - 匹配更大向量中的序列

转载 作者:行者123 更新时间:2023-12-04 00:27:42 26 4
gpt4 key购买 nike

我想要一个函数,它返回一个向量的匹配子序列的初始索引。例如:

y <- c("a","a","a","b","c")

multi_match(c("a","a"), y)
# [1] 1 2

multi_match(c("a","b"), y)
# [1] 3

我有一个粗略的实现,但我觉得我必须重新发明轮子,而且有点笨拙。有没有更好的方法来实现这一点,或者是否有具有类似功能的预先存在的功能?
multi_match <- function(x, table){
# returns initial indicies of all substrings in table which match x
if(length(table) < length(x)){
return(NA)
}else{
check_mat <- matrix(nrow = length(x), ncol = length(table))
for(i in 1:length(x)){
check_mat[i,] <- table %in% x[i]
}
out <- vector(length = length(table))
for(i in 1:(length(table)-(length(x)-1))){
check <- vector(length=length(x))
for(j in 1:length(x)){
check[j] <- check_mat[j,(i+(j-1))]
}
out[i] <- all(check)
}
if(length(which(out))==0){
return(NA)
}else{
return(which(out))
}
}
}

最佳答案

试试 rollapply在动物园:

library(zoo)
which(rollapply(y, 2, identical, c("a", "a")))
## [1] 1 2
which(rollapply(y, 2, identical, c("a", "b")))
## [1] 3

关于r - 匹配更大向量中的序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16244006/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com