R语言dplyr筛选与管道操作中filter函数使用出错排查
代码核心错误拆解
- 管道符
%>%使用位置完全错误。管道的功能是把左侧的运算输出作为第一个参数,传给右侧的函数,本身没有任何“匹配值”的作用。你写的Condition %>% low,本质是让R把Condition列的所有内容,传给low这个对象当输入参数——但low只是存了3个字符串的普通向量,不是可接收输入的函数,这段逻辑运行时会直接报错,根本生成不了筛选需要的“真/假”判断值,完全达不到筛选目的。 - 多值匹配的判断逻辑完全错配。filter函数要求第二个参数是能逐行返回布尔值的逻辑表达式,要判断Condition列的取值是否在low这个目标集合里,必须使用
%in%操作符,不能拿管道当两个值之间的匹配连接符用。
正确可运行的代码
# 写法1:直接传参的基础filter形式 lowPol <- filter(completedResponses, Condition %in% low) # 写法2:用管道串联数据操作流程的dplyr常规写法 lowPol <- completedResponses %>% filter(Condition %in% low)
排查提示:如果运行正确代码后结果仍不符合预期,可以单独执行
table(completedResponses$Condition %in% low)查看匹配到的行数,确认Condition列的字符串和low里存储的三个值是否存在空格、大小写不一致的问题。
内容的提问来源于stack exchange,提问作者Gretchen Decker
相关产品推荐
相关产品推荐

