为何在R语言filter()中使用%in%与==会得到不同结果?
为什么
%in%和==筛选结果差异巨大? 核心原因:两者的匹配逻辑完全不同
1. %in%:做成员资格检查
%in%的作用是逐个判断左边的每个元素是否属于右边的集合,只要元素在你指定的6个州列表里,就会被保留。这完全符合你“筛选所有新英格兰地区州数据”的需求,所以能得到所有符合条件的行(115行)。
2. ==:按位置循环匹配
==是逐位置对比元素,当左右两边向量长度不一致时,R会自动把短的向量循环重复拉长,直到和长向量长度一致,再逐个位置对比。
放到你的场景里:
gas_tsibble$state是一个长向量(每个州对应多年数据,总长度远大于6)- 你用
state == c("Maine", "Vermont", "New Hampshire", "Massachusetts", "Coonnecticut", "Rhode Island")时,R会把这个6元素的向量循环重复,变成c("Maine", "Vermont", ..., "Rhode Island", "Maine", "Vermont", ...)的无限循环版 - 只有当某一行的
state刚好和循环后对应位置的元素完全相同时,才会被保留。比如第1行state是Maine,对应循环向量第1个元素Maine → 匹配;第2行state是Maine,对应循环向量第2个元素Vermont → 不匹配;第7行state是Maine,对应循环向量第7个元素(也就是循环后的第1个)Maine → 匹配……最终只有极少数位置刚好对上的行被保留,所以结果只有19行。
额外提示:拼写错误
你代码里的Coonnecticut是拼写错误,正确应该是Connecticut,虽然这个不影响本次筛选的差异问题,但后续使用时建议修正,避免漏选数据。
内容的提问来源于stack exchange,提问作者Mir
相关产品推荐
相关产品推荐

