如何删除包含特定字符的行?

3
我希望删除数据框中包含开括号“(”的行。
我尝试了以下操作:
df[!grepl("(", df$Name),] 

但是这并没有追踪到(符号。

3
( 在 grep 表达式中被视为正则表达式的一部分而不是一个字符。尝试转义开括号,使用 \\( 然后看看是否可以解决问题。你可以在这里找到更多详细信息:https://dev59.com/k14c5IYBdhLWcg3wnrf9 - Deena
像这样吗?df[!grepl(\(, df$Name),] - nemja
1个回答

6
你需要用 \\ 来双重转义 (
x <- c("asdf", "asdf", "df", "(as")

x[!grepl("\\(", x)]
# [1] "asdf" "asdf" "df"  

只需像这样将其应用于您的df:df[!grepl("\\(", df$Name), ]

您还可以考虑使用正则表达式删除所有标点符号:

x[!grepl("[[:punct:]]", x)]

正如评论中@CSquare所指出的那样,这里有一个关于R regex特殊字符的很好的总结


来自评论的额外输入:
@Sotos: 使用pattern='('fixed = TRUE可以提高性能,因为正则表达式可以被绕过。

x[!grepl('(', x, fixed = TRUE)]

2
我建议使用fixed = TRUE而不是转义括号,即(x[!grepl('(', x, fixed = TRUE)]),因为它可以绕过正则表达式引擎,更加高效。 - Sotos
grep("(", x, fixed=TRUE, invert=TRUE, value=TRUE) - jogo
感谢你的提示,我已经把它加入到 A 里了。 - loki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接