我正在尝试在R中编写通用代码,在该代码中我将在向量中按连续的特定顺序查找2个(或将来更多)显式字符。我尝试的每个命令只会返回第一个字符的匹配项。
我有一个看起来与数据相似的字符串,并且我想提取仅具有“ L”和“ V”并排的位置。所以我唯一的比赛应该是3&4和7&8;但是,我将返回位置1、3和7作为L的比赛。是否可能只返回“ LV”比赛?
可重复使用的数据:
data <- c("L", "D", "L", "V", "A", "V", "L", "V")
答案 0 :(得分:0)
向量data
首先可以用paste
折叠成一个字符串。然后我们可以通过gregexpr
找到起始位置。之后,我们可以通过将gregexpr
的结果与调整后的匹配长度属性进行串联来形成起点和终点的列表。
x <- gregexpr("LV", paste(data, collapse = ""))[[1]]
Map(c, x, x + attr(x, "match.length") - 1)
# [[1]]
# [1] 3 4
#
# [[2]]
# [1] 7 8
答案 1 :(得分:0)
有一些可能性:
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