R中判断数据框列是否包含特定字符及grepl使用问题咨询
错误原因
grepl函数默认将第一个匹配参数识别为正则表达式,而+是正则语法中的特殊量词,代表「匹配前一个字符1次及以上」。你直接传入"+"作为匹配规则时,正则解析逻辑没有明确的前置匹配对象,会默认匹配所有非空字符串,因此所有行的返回结果都是TRUE,最终得到全为yes的错误输出。
修正方法
有两种常用修正方案,都可以实现无需手动逐行赋值的批量处理需求:
- 对特殊正则字符转义:在
+前加两个反斜杠\\做正则转义,告诉解析器你要匹配的是+本身的字面量
df1$plus_test_short <- ifelse(grepl("\\+", df1$var_sting), "yes", "no")
- 开启字面量匹配模式:给
grepl加fixed = TRUE参数,函数会直接匹配字符串字面量,不需要解析正则规则,写法更直观
df1$plus_test_short <- ifelse(grepl("+", df1$var_sting, fixed = TRUE), "yes", "no")
以上两种方案运行后,df1$plus_test_short的输出结果都会是符合预期的"no" "yes",支持任意行数的数据集批量处理。
内容的提问来源于stack exchange,提问作者Mel
相关产品推荐
相关产品推荐

