簡體   English   中英

通過 R 中的多個條件進行復雜過濾

[英]complex filter by multiple conditions in R

我正在嘗試根據多個條件過濾 df:

這是我的 df 的一部分:

     cym    isop   macr    pin   mvk    euc  t_2m  hour   day month  BVOC  AVOC isop_ox monoterpenes
   <dbl>   <dbl>  <dbl>  <dbl> <dbl>  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>   <dbl>        <dbl>
 1 1.56  NA      0.570  0.0482 7.27  NA      28.7    14     6     2  9.45 5.21    7.84         1.61 
 2 1.05  NA      0.320  0.0225 6.77  NA      27.3    16     6     2  8.16 2.93    7.09         1.07 
 3 0.560  0.559  0.122  0.0144 1.48   2.01   26.4    17     6     2  4.74 1.87    2.16         2.58 
 4 0.402  0.276  0.0795 0.0113 0.431  0.87   25.4    18     6     2  2.07 1.29    0.787        1.28 
 5 0.325  0.0624 0.0416 0.0148 0.360  0.853  24.8    19     6     2  1.66 1.05    0.464        1.19 
 6 0.297  0.699  0.131  0.0197 3.92   0.995  25.6     8     7     2  6.06 1.59    4.75         1.31 
 7 0.218  0.565  0.213  0.012  5.67   0.593  26.5     9     7     2  7.27 1.17    6.45         0.823
 8 0.144  0.666  0.174  0.006  6.57   0.458  29.1    11     7     2  8.02 0.687   7.41         0.608
 9 0.274  1.58   0.255  0.0098 6.73   0.664  29.7    13     7     2  9.51 1.12    8.56         0.948
10 0.187  0.952  0.156  0.0062 3.22   0.355  28.7    14     7     2  4.88 0.797   4.33         0.549

我想根據月份列使用不同的條件,如下所示:

day_data_f <- wd_filter_data%>%
   select(cym, isop, macr,pin,mvk,euc,t_2m,hour,day,month,
         BVOC, AVOC,isop_ox,monoterpenes,Month)%>%
   filter(month==2, between(hour,6,21)) 

問題是我想根據月份列值應用多個條件。 例如:

filter(month==3, between(hour,6,20))
filter(month==5, between(hour,6,17))
filter(month==6, between(hour,7,17))

有沒有辦法一次應用所有這些過濾器?

您可以使用 OR ( | ) 運算符組合條件。

library(dplyr)

wd_filter_data %>%
  filter(month == 2 & between(hour,6,21) | 
         month == 3 & between(hour,6,20) | 
         month == 5 & between(hour,6,17) | 
         month == 6 & between(hour,7,17)) 

我們可以用pmap創建邏輯向量

library(purrr)
library(dplyr)
pmap(list(c(2:3, 5:6), rep(c(6, 7), c(3, 1)), c(21, 20, 17, 17)), 
           ~  (data$month == ..1) & between(data$hour, ..2, ..3)) %>%
 reduce(`|`) %>%
 filter(wd_filter_data, .)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM