You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言中用grepl筛选含(不含%的行遇问题,求解决方法

解决方法

问题出在正则表达式的特殊字符转义上:(是正则中的特殊元字符(用于开启捕获组),直接匹配会导致语法错误,必须用双反斜杠\\(转义才能匹配普通的左括号;而%不属于正则特殊字符,直接匹配即可。

根据你给出的期望结果,实际需求是排除同时包含(和%的行,用dplyr管道结合grepl可以这样实现:

library(dplyr)

df <- data.frame(col1 = c("ap(pl)e", "or(a)ng%e", "pe%ar", "bl(u%)e", "red"),
                 col2 = c(1,3,5,4,8))

# 筛选不同时包含(和%的行
df %>%
  filter(!(grepl("\\(", col1) & grepl("%", col1)))

运行后得到的结果就是你期望的:

col1 col2
1 ap(pl)e    1
2   pe%ar    5
3     red    8

如果一定要用case_when,可以在filter里通过条件判断返回逻辑值:

df %>%
  filter(
    case_when(
      # 同时包含(和%的行标记为不保留
      grepl("\\(", col1) & grepl("%", col1) ~ FALSE,
      # 其余所有行都保留
      TRUE ~ TRUE
    )
  )

关键说明

  • 匹配正则特殊字符(如(, ), ., *等)时,必须在字符前加双反斜杠\\,让正则引擎将其识别为普通字符。
  • 如果你的真实需求是仅保留包含(且不包含%的行,可以用以下代码:
df %>%
  filter(grepl("\\(", col1) & !grepl("%", col1))

内容的提问来源于stack exchange,提问作者Mathica

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 00:20:44