多个部分字符串匹配之一R.

时间:2018-03-23 20:43:05

标签: r regex dataframe

我有一个data.frame,其中一列有名字,有些后面是括号中的一串字母。我想删除这些行。所以,例如:

> df

   Name              x1    x2
1  Michael (ACBFED)   3     5
2  Mickey (A)         4     1
3  Mike               2     7
4  Mick (RC)          8     6

我最终想要:

   Name         x1    x2
3  Mike          2     7

每个字符串都以"(A"或"(R")开头,所以我想我可以用grep来查找"(A"或" (R",但是我得到一个错误,说我错过了相应的")"。我如何限制搜索toba字符串的开头和结尾括号?

提前致谢!

1 个答案:

答案 0 :(得分:1)

假设我们有data.frame喜欢这个:

data <- data.frame(name=c("What", "Where (A)", "When (B)", "Why"), x1=1:4, x2=9:6)
> data
       name x1 x2
1      What  1  9
2 Where (A)  2  8
3  When (B)  3  7
4       Why  4  6

尝试使用grep选择行:

data[grep("(", data$name), ]

不起作用,因为(在正则表达式中具有特殊含义。我们需要使用\\

来逃避该角色
> data[grep("\\(.*?\\)", data$name), ]
       name x1 x2
2 Where (A)  2  8
3  When (B)  3  7

注意:.*?\\)此处表示匹配任意数量的任何符号,直到第一次结束)

这可行,但选择()的行而不是删除它。我们可以添加invert=TRUE来获取我们需要的内容:

> data[grep("\\(.*?\\)", data$name, invert=TRUE), ]
  name x1 x2
1 What  1  9
4  Why  4  6