基于另一因子分组的列值范围,移除tibble不符合条件的行
数据过滤解决方案
步骤1:计算基准范围
先提取v3为"b"的行,计算v1和v2的最小、最大值,作为过滤基准:
library(dplyr) # 计算v3="b"时v1、v2的极值范围 b_ranges <- df %>% filter(v3 == "b") %>% summarise( v1_min = min(v1), v1_max = max(v1), v2_min = min(v2), v2_max = max(v2) )
步骤2:执行过滤
基于上述范围,保留v3="b"的所有行,以及v3="a"中v1、v2均未超出对应基准范围的行:
filtered_df <- df %>% filter( v3 == "b" | (v3 == "a" & between(v1, b_ranges$v1_min, b_ranges$v1_max) & between(v2, b_ranges$v2_min, b_ranges$v2_max)) )
验证结果
运行后得到的filtered_df与预期一致:
# 输出结果 filtered_df #> # A tibble: 9 × 3 #> v1 v2 v3 #> <dbl> <dbl> <fct> #> 1 5 1 a #> 2 7 1 a #> 3 4 1 a #> 4 3 1 b #> 5 4 4 b #> 6 5 5 b #> 7 6 6 b #> 8 6 6 b #> 9 7 7 b
逻辑说明
- 对于
v3="b"的行,全部保留; - 对于
v3="a"的行,仅保留v1在b组v1的min-max区间且v2在b组v2的min-max区间的行,其余不符合条件的a组行被移除。
内容的提问来源于stack exchange,提问作者Wilson Souza
相关产品推荐
相关产品推荐

