选择具有特定字符的元素

时间:2014-04-24 06:42:59

标签: r text

我有一个原子向量,每个元素都有不同长度的字符,如下所示:

 A <- c("ABCDE", "ADLBB", "ASDLB", "ABCDG", "ABCDGDL")

我的任务是选择带有“DL”的那些。

棘手的部分是DL并不总是固定在元素的特定位置。

我的理想答案是:

[1] "ADLBB" "ASDLB" "ABCDGDL"

我试过了grep("[DL]", A, value=TRUE),但似乎没有用。

感谢。

2 个答案:

答案 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"

这些参数允许用户减少冗长的正则表达式。