如果行中存在范围之间的任何值,则在R中过滤

polhcujo  于 2023-02-06  发布在  其他
关注(0)|答案(1)|浏览(108)

我有这个data.frame

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.001   0.000   0.000   0.999

这里的列是给定类中成员的概率,我需要过滤具有给定范围(比如.30 > x > .70)之间的任何值的行。
理想的结果是

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)),但它返回了几乎所有的行。

ajsxfq5m

ajsxfq5m1#

您可以rowwise过滤所有列并检查条件,如下所示:

library(dplyr)
df %>% 
  rowwise() %>% 
  filter(any(c_across() > 0.3 & c_across() < 0.7))

#> # A tibble: 2 × 5
#> # Rowwise: 
#>      V1    V2    V3    V4    V5
#>   <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 0.651     0     0     0 0.349
#> 2 0.683     0     0     0 0.317

创建于2023年2月1日,使用reprex v2.0.2

相关问题