和/或具有满足多个条件的单因素水平的条件过滤
Posted
技术标签:
【中文标题】和/或具有满足多个条件的单因素水平的条件过滤【英文标题】:And/or conditional filtering with single factor levels that meet multiple conditions 【发布时间】:2021-11-07 16:20:31 【问题描述】:考虑这个数据框:
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
s。 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
s 语法来做到这一点呢?
【问题讨论】:
【参考方案1】:我们可以这样做;
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
【讨论】:
【参考方案2】:我们可以在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
【讨论】:
以上是关于和/或具有满足多个条件的单因素水平的条件过滤的主要内容,如果未能解决你的问题,请参考以下文章