为什么R中按指定.id筛选dataframe时报长对象非短对象倍数警告
问题成因
你出现该警告和筛选结果异常的核心原因是误用了==运算符进行集合匹配:
- R中
==是逐元素对等比较运算符,要求左右两侧向量长度一致,若长度不一致会自动循环重复较短的向量完成逐元素匹配,这一逻辑完全不符合「判断.id值是否属于指定id集合」的需求 - 你的
.id列长度远大于右侧指定的id向量长度,且二者长度没有整倍数关系,因此触发了长度不匹配的警告,最终得到的筛选结果完全不符合预期。
解决方法
将==替换为R中专门用于集合包含判断的%in%运算符即可,%in%会依次判断左侧向量的每个元素是否存在于右侧的集合中,完全匹配你的筛选需求。
修改后的代码如下:
newdatarev = subset(newdata, .id %in% c(3,5:12,14,20:64,66:72,75,78:79,81:111,113:136,138:149,151:160, 162:183,185:225,227:233,235:247,249,251:264,266:328,330:364,366:383, 385:411,413:471,473:490,492:580,582:598,600:603,605:606,608:619,621:646, 648:686,688:718,720:746,748,750:753,755:762,764:861,863:875,877:894, 897:911,913:914,916:926,928:941))
内容的提问来源于stack exchange,提问作者TreausreDragon
相关产品推荐
相关产品推荐

