R语言中筛选数值处于CatMin与CatMax区间的数据行失败求助
问题排查与解决
你遇到的核心问题是筛选逻辑写反了,咱们来一步步理清:
错误原因拆解
你写的筛选条件是:
with(refDat, CatMax <= 30 & CatMin >= 30)
这个条件要求CatMax≤30的同时CatMin≥30,相当于要求CatMin ≥ CatMax,但你的数据框里所有行都是CatMin < CatMax,所以必然全返回FALSE。
而你实际需要的逻辑是:数值30落在CatMin和CatMax之间,也就是30 ≥ CatMin且30 ≤ CatMax,对应代码里的表达式应该是CatMin <= 30 & CatMax >= 30。
正确代码实现
运行下面的正确代码就能得到你想要的结果:
# 筛选30所在的行 target_row <- refDat[with(refDat, CatMin <= 30 & CatMax >= 30), ] target_row
输出结果正是你期望的第3行:
CatMin CatMax correctionRef 3 28 33 0
可选的更直观写法
如果你习惯用dplyr包,也可以用更易读的filter函数:
library(dplyr) refDat %>% filter(CatMin <= 30, CatMax >= 30)
执行后同样会返回正确的行。
内容的提问来源于stack exchange,提问作者89_Simple
相关产品推荐
相关产品推荐

