在R语言中按多个数值范围筛选数据框行的问题
解决dplyr筛选指定Day范围的问题
你写的代码里,Day == 1:3 | Day ==7:10是按位置逐元素匹配的,不是判断Day是否属于这两个数值集合。因为df有30行,1:3会循环10次,7:10会循环7次还多2个元素,逻辑判断结果因此混乱,导致只筛选出了部分符合预期的行。
下面是几种正确的写法:
方法1:用%in%匹配目标集合
把需要保留的Day值合并成一个向量,用%in%判断Day是否在这个集合内:
df2 <- dplyr::filter(df, Day %in% c(1:3, 7:10))
方法2:用逻辑区间直接判断
写出两个范围的逻辑条件,用|连接实现“或”的判断:
df2 <- dplyr::filter(df, (Day >= 1 & Day <= 3) | (Day >=7 & Day <=10))
方法3:用dplyr的between函数简化区间判断
利用dplyr::between快速判断数值是否在指定区间内:
df2 <- dplyr::filter(df, dplyr::between(Day, 1, 3) | dplyr::between(Day,7,10))
以上三种方法都能正确保留所有ID对应的Day为1、2、3、7、8、9、10的行。
内容的提问来源于stack exchange,提问作者mda08rds
相关产品推荐
相关产品推荐

