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 个 Year
。 ID == a
和ID == c
只有1990年的观测值,而ID == b
和ID == D
这两年都有观测值。我们想过滤 ID
有两年观测值的情况,因此预期结果如下所示:
ID Year
b 1990
b 1990
b 2000
b 2000
d 1990
d 1990
d 2000
d 2000
使用 dplyr
s 语法,我们不能像这样使用 &
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
考虑这个数据框:
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 个 Year
。 ID == a
和ID == c
只有1990年的观测值,而ID == b
和ID == D
这两年都有观测值。我们想过滤 ID
有两年观测值的情况,因此预期结果如下所示:
ID Year
b 1990
b 1990
b 2000
b 2000
d 1990
d 1990
d 2000
d 2000
使用 dplyr
s 语法,我们不能像这样使用 &
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