我有一个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字符串的开头和结尾括号?
提前致谢!
答案 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