为什么去除所有空格后R dplyr的字符串匹配判断仍不生效
问题成因
核心错误出在条件判断的运算符使用不当,具体原因如下:
- 向量逐位比较的循环规则不符合需求:
==是逐元素相等匹配运算符,当你将长度为30的in_sample列和长度为2的向量c("Bahrain", "PG")用==比较时,R会自动将短向量循环拉长到和长向量相同长度,也就是实际执行的对比逻辑为:
这完全不是你想要的「判断值是否属于这两个目标值集合」的逻辑,因此大部分行的匹配结果和预期不符。in_sample[1] == "Bahrain" in_sample[2] == "PG" in_sample[3] == "Bahrain" in_sample[4] == "PG" ...以此类推 - 冗余的字符串处理(非核心问题):代码先后调用了
str_trim(删除首尾空格)和str_remove_all(fixed(" "))(删除所有空格),两步功能重叠,如果你只需要清理首尾空格,后一步会错误删除字符串中间的有效空格。
修复方法
将==替换为R中专门用于集合成员判断的%in%运算符即可,修改后的对应代码行:
mutate(col3=if_else(in_sample %in% c("Bahrain", "PG"), "foo", "bar", missing = NULL))
内容的提问来源于stack exchange,提问作者Hammao
相关产品推荐
相关产品推荐

