首页 > 解决方案 > 带位置的连续字符匹配和提取

问题描述

我正在尝试在 R 中编写一个通用代码,在其中我以特定顺序在向量中连续查找 2 个(或更多)显式字符。我尝试的每个命令都只会返回第一个字符的匹配项。

我有一个看起来类似于数据的字符串,我想提取只有“L”和“V”并按顺序相邻的位置。所以我唯一的匹配应该是位置 3 & 4 和 7 & 8; 但是,我将返回位置 1、3 和 7 作为 L 的匹配项。是否可以只返回“LV”匹配项?

可重复使用的数据:

data <- c("L", "D", "L", "V", "A", "V", "L", "V")

标签: rpattern-matchingregex-lookaroundsgrepl

解决方案


以下是一些可能性:

which(ts(data) == "L" & stats::lag(ts(data)) == "V")
## [1] 3 7

which(head(data, -1) == "L" & tail(data, -1) == "V")
## [1] 3 7

which(apply(t(embed(data, 2)) == c("V", "L"), 2, all))
## [1] 3 7

which(data == "L" & dplyr::lead(data) == "V")
## [1] 3 7

推荐阅读