Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多个部分字符串中的一个与R匹配_R_Regex_Dataframe - Fatal编程技术网

多个部分字符串中的一个与R匹配

多个部分字符串中的一个与R匹配,r,regex,dataframe,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 M

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


提前感谢!

假设我们有一个
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
不起作用,因为
在正则表达式中有特殊含义。我们需要用
\\
转义该字符:

> 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

假设我们有一个像这样的
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
不起作用,因为
在正则表达式中有特殊含义。我们需要用
\\
转义该字符:

> 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

请提供您迄今为止编写的代码,以便我们能够帮助您了解哪里出了问题。请提供您迄今为止编写的代码,以便我们能够帮助您了解哪里出了问题。