And/or 单因子水平满足多个条件的条件过滤

And/or conditional filtering with single factor levels that meet multiple conditions

考虑这个数据框:

data <- data.frame(ID = rep(letters[1:4], each= 4),
                   Year = c('1990','1990','1990','1990',
                            '1990','1990','2000', '2000',
                            '1990','1990','1990','1990',
                            '1990','1990','2000', '2000'))

我们有 4 个独特的 ID 和 2 个 YearID == aID == c只有1990年的观测值,而ID == bID == D这两年都有观测值。我们想过滤 ID 有两年观测值的情况,因此预期结果如下所示:

ID   Year
b    1990
b    1990
b    2000
b    2000
d    1990
d    1990
d    2000
d    2000

使用 dplyrs 语法,我们不能像这样使用 & group_by(ID)filter

data%>%
  group_by(ID)%>%
  filter(Year == '1990' & Year == '2000')

因为这两个条件都涉及同一因素的水平 (Year)。

那么我们如何使用 dplyr 的语法来做到这一点?

我们可以这样做;

data %>%
group_by(ID) %>%
mutate(unique_ind=n_distinct(Year)) %>%
filter(unique_ind==2) %>%
ungroup %>%
select(-unique_ind)

输出;

 ID    Year 

1 b     1990 
2 b     1990 
3 b     2000 
4 b     2000 
5 d     1990 
6 d     1990 
7 d     2000 
8 d     2000 

我们可以在filter

中构建逻辑向量
library(dplyr)
data %>%
    group_by(ID) %>%
    filter(n_distinct(Year) > 1) %>% 
    ungroup
# A tibble: 8 x 2
  ID    Year 
  <chr> <chr>
1 b     1990 
2 b     1990 
3 b     2000 
4 b     2000 
5 d     1990 
6 d     1990 
7 d     2000 
8 d     2000