r - 以相同的顺序将模式的所有元素与向量匹配
问题描述
我创建了一个函数yes.seq
,它接受两个参数,一个模式pat
和数据dat
。该函数以相同的顺序查找数据中是否存在模式
例如
dat <- letters[1:10]
dat
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"
pat <- c('a',"c","g")
yes.seq(pat = pat,dat = dat)
# [1] TRUE
因为这个序列在模式中并且顺序相同
"a"
“b” "c"
“d” “e” “f” "g"
“h” “i” “j”
例如,如果 'dat' 反转,那么我们得到FALSE
:
yes.seq(pat = pat, dat = rev(dat))
# [1] FALSE
这是我的功能
yes.seq <- function(pat , dat){
lv <- rep(F,length(pat))
k <- 1
for(i in 1:length(dat)){
if(dat[i] == pat[k])
{
lv[k] <- TRUE
k <- k+1
}
if(k==length(pat)+1) break
}
return( all(lv) )
}
有没有更高效的解决方案,这个功能对我来说太慢了
解决方案
我们可以paste
使用它们grepl
grepl(paste(pat, collapse=".*"), paste(dat, collapse=""))
#[1] TRUE
或者str_detect
library(stringr)
str_detect(paste(dat, collapse=""), paste(pat, collapse=".*"))
#[1] TRUE
推荐阅读
- spring - Spring Batch - 自定义 FileItemWriter 的零星问题
- python - mpl_finance 删除 Candlestick Python 上的空日期
- r - 将 Googleway 输出转换为数据框时出错
- c# - 从 PNG 文件的 URI 创建具有透明度的位图对象
- php - C++ PHP 桌面和 CEF 崩溃 LoadUrl()
- java - 如何获取数据或识别标签,即使用 Selenium Java 成功完成
- docker - Dockerhub repo 图像解析不起作用
- mongodb - 获取 mongo db 数组中特定元素的值
- mysql - 为什么count(*)即使有结果也返回0?
- php - 限时购车 Laravel