我正试图根据多种条件过滤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, .)