【问题标题】:One of Multiple Partial String Matches R [closed]多个部分字符串匹配R之一[关闭]
【发布时间】:2018-03-23 20:43:04
【问题描述】:

我有一个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 字符串?

提前致谢!

【问题讨论】:

  • 请提供您目前编写的代码,以便我们帮助您查看哪里出错了。

标签: r regex dataframe


【解决方案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

【讨论】:

    猜你喜欢
    • 2018-06-21
    • 1970-01-01
    • 2014-07-20
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多