如何解决字符向量是否与dplyr :: ween等效?
我正在使用小标题,我想提取两个正则表达式之间的行。
首先,我将在新列中检测正则表达式并对其进行标记。
tib <- tibble::tibble(
x = c('a','b','c','d','e'),y = c(F,T,F,F)
)
# A tibble: 5 x 2
x y
<chr> <lgl>
1 a FALSE
2 b TRUE
3 c FALSE
4 d TRUE
5 e FALSE
预期结果:
tib %>%
dplyr::filter(
dplyr::between(x,T)
)
# A tibble: 2 x 2
x y
<chr> <lgl>
1 b TRUE
2 c FALSE
3 d TRUE
但是, dplyr::between()
用于数字向量。无论如何,它不会返回两个TRUE对象之间的行。
字符向量是否等于dplyr::between()
?或者也许有人建议使用我创建的布尔对象的另一种方式。
此致
解决方法
首先想到的是slice
与which
˙的组合,例如:
library(dplyr)
tib %>%
slice(first(which(x == 'b')):last(which(x == 'd')))
或者使用y
本身:
tib %>%
slice(first(which(y)):last(which(y)))
输出:
# A tibble: 3 x 2
x y
<chr> <lgl>
1 b TRUE
2 c FALSE
3 d TRUE
,
一种方法是获取TRUE
的索引并创建序列,即
v1 <- which(tib$y)
tib[v1[1]:tail(v1,1),]
# A tibble: 3 x 2
x y
<chr> <lgl>
1 b TRUE
2 c FALSE
3 d TRUE
,
我不确定您是否了解该功能。但是您可以使用regexpr
。
r <- regexpr("TFT",paste(substr(as.character(tib$y),1,collapse=""))
tib[r:(r + attr(r,"match.length") - 1),]
# x y
# 2 b TRUE
# 3 c FALSE
# 4 d TRUE
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。