R语言筛选data.frame:保留含0.3-0.7区间值的行
问题:筛选DataFrame中任意列值处于0.3-0.7区间的行
原始数据
V1 V2 V3 V4 V5 <dbl> <dbl> <dbl> <dbl> <dbl> 0.000 0.000 0.000 0.000 1.000 0.651 0.000 0.000 0.000 0.349 0.000 0.000 1.000 0.000 0.000 0.703 0.000 0.297 0.000 0.000 0.018 0.982 0.000 0.000 0.000 0.683 0.000 0.000 0.000 0.317 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 0.999
需求
筛选出任意一列存在数值在0.3到0.7之间的行,最终期望结果:
V1 V2 V3 V4 V5 <dbl> <dbl> <dbl> <dbl> <dbl> 0.651 0.000 0.000 0.000 0.349 0.683 0.000 0.000 0.000 0.317
错误代码问题分析
你之前使用的代码:
data %>% filter(if_any(starts_with("V"), ~ . > 0.3) & if_any(starts_with("V"), ~ . < 0.7))
返回几乎所有行的原因是:这个逻辑是“存在列数值大于0.3” 并且 “存在列数值小于0.7”,绝大多数行都满足这个条件(比如第一行V5=1>0.3,同时其他列都是0<0.7),所以会被错误保留。
正确实现方法
需要判断的是存在某一列的数值同时满足0.3 < 值 < 0.7,把两个条件合并到同一个if_any调用中:
data %>% filter(if_any(starts_with("V"), ~ . > 0.3 & . < 0.7))
验证结果
运行上述代码后,会准确筛选出符合要求的两行,与期望结果完全一致。
内容的提问来源于stack exchange,提问作者Marcelo
相关产品推荐
相关产品推荐

