我有一个原子向量,每个元素都有不同长度的字符,如下所示:
A <- c("ABCDE", "ADLBB", "ASDLB", "ABCDG", "ABCDGDL")
我的任务是选择带有“DL”的那些。
棘手的部分是DL并不总是固定在元素的特定位置。
我的理想答案是:
[1] "ADLBB" "ASDLB" "ABCDGDL"
我试过了grep("[DL]", A, value=TRUE)
,但似乎没有用。
感谢。
答案 0 :(得分:1)
使用grepl
:
A <- c("ABCDE", "ADLBB", "ASDLB", "ABCDG", "ABCDGDL")
grepl("DL", A)
输出:
# [1] FALSE TRUE TRUE FALSE TRUE
如果您只想选择那些观察结果:
A[grepl("DL", A)]
输出:
#[1] "ADLBB" "ASDLB" "ABCDGDL"
答案 1 :(得分:1)
使用grep
,它将是
> A <- c("ABCDE", "ADLBB", "ASDLB", "ABCDG", "ABCDGDL")
> grep("DL", A, value = TRUE, fixed = TRUE)
## [1] "ADLBB" "ASDLB" "ABCDGDL"
如果设置[
,则fixed = TRUE
无需捕获字符。它将按原样捕获“DL”。另一个品种是
> A[grep("DL", A, fixed = TRUE)]
## [1] "ADLBB" "ASDLB" "ABCDGDL"
由于您提到您正在学习R 中的正则表达式,因此grep
的其他一些变体在许多情况下都非常方便。
单独,它返回捕获的正则表达式的索引
> grep("DL", A, fixed = TRUE)
## [1] 2 3 5
当我们添加invert = TRUE
时,我们得到不匹配的向量索引(基本上与上一行相反)
> grep("DL", A, fixed = TRUE, invert = TRUE)
## [1] 1 4
将value = TRUE
添加到其中,我们得到的值不匹配。相反,相反。
> grep("DL", A, fixed = TRUE, invert = TRUE, value = TRUE)
## [1] "ABCDE" "ABCDG"
如果我们添加一些混合了小写字母的元素,我们可以捕获那些ignore.case
的元素。我们也不再需要fixed
,因为我们正在搜索案例中的变体。
> B <- c(A, "aBcdLe", "Dlabrt", "abcde")
> grep("DL", B, value = TRUE, ignore.case = TRUE)
## [1] "ADLBB" "ASDLB" "ABCDGDL" "aBcdLe" "Dlabrt"
这些参数允许用户减少冗长的正则表达式。