R过滤多个组合

R filtering multiple Combinations

使用过滤器过滤多个组合的最efficient/easiest方法是什么?

示例 - 我希望返回 2022 年和第 1 季度、2021 年和第 2 季度等的结果...我不认为下面是 correct/best 查看它的方式:

dataset %>%
filter(year== "2022" & quarter== "1") %>%
filter(year== "2021" & quarter== "4") %>%
filter(year== "2021" & quarter== "3") %>%
filter(year== "2021" & quarter== "2")

您似乎想要 select 一个日期范围。如果将年份和季度合并为一个值,则可以轻松地对它们进行过滤。

示例数据集

df = data.frame(year = c("2000","2000","2000","2000","2001","2001","2001","2001"),
                quar = c("1","2","3","4","1","2","3","4")
                )

创建组合字段

df <- df %>% mutate(period = paste(df$year, df$quar))

  year quar period
1 2000    1 2000 1
2 2000    2 2000 2
3 2000    3 2000 3
4 2000    4 2000 4
5 2001    1 2001 1
6 2001    2 2001 2
7 2001    3 2001 3
8 2001    4 2001 4

确保不要用 .- 分隔值,因为 R 会将它们作为小数点或负号处理。您也可以将它们组合成一个数字(20001、20002 等),但我认为这样会不太清晰。

简单过滤

对于一个范围:

df %>% filter(period >= "2000 3" & period <= "2001 2")

  year quar period
1 2000    3 2000 3
2 2000    4 2000 4
3 2001    1 2001 1
4 2001    2 2001 2

对于多个单独的值,使用 OR 运算符 |:

df %>% filter(period == "2000 1" | period == "2000 3")

  year quar period
1 2000    1 2000 1
2 2000    3 2000 3

当然,OR | 和 AND & 都可以组合。请记住使用括号来定义操作顺序:

df %>% filter(period == "2000 1" | (period >= "2000 3" & period <= "2001 2"))

  year quar period
1 2000    1 2000 1
2 2000    3 2000 3
3 2000    4 2000 4
4 2001    1 2001 1
5 2001    2 2001 2