tidyverse中%in%与==运算符筛选变量的差异及正确性疑问
%in% 和 == 在dplyr::filter中的区别与正确用法
正确的筛选方式
你写的第一行代码是对的:
dfData1 <- dfData1 %>% filter(race %in% c(1,2))
它会准确筛选出race取值为1或2的所有观测,完全满足你的需求。
为什么用==会出错?
第二行代码dfData2 <- dfData2 %>% filter(race==c(1,2))逻辑错误,因为==是逐元素匹配的运算符:
- 它会把
race列的第1个值和c(1,2)的第1个元素(1)比较 - 第2个值和
c(1,2)的第2个元素(2)比较 - 第3个值又循环和
c(1,2)的第1个元素(1)比较,以此类推
这种循环匹配的逻辑和你要的“匹配1或2”完全不是一回事,结果自然不对,甚至可能因为向量长度不匹配弹出警告。
两者核心差异
%in%:检查左侧元素是否属于右侧的集合,只要是集合里的任意值都返回TRUE,专门用于多值匹配场景。==:要求左右两侧元素逐位置完全相等,只适合单值匹配(比如race == 1),多值场景用它只会搞出乱子。
内容的提问来源于stack exchange,提问作者abenol
相关产品推荐
相关产品推荐

