和/或具有满足多个条件的单因素水平的条件过滤

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 个 Years。 ID == 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 语法,我们不能像这样使用&amp; group_by(ID)filter

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

因为这两个条件都与同一因素的水平有关 (Year)。

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

【问题讨论】:

【参考方案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 

【讨论】:

以上是关于和/或具有满足多个条件的单因素水平的条件过滤的主要内容,如果未能解决你的问题,请参考以下文章

在 R dplyr 中过滤具有多个条件名称匹配的数据框

使用具有多个搜索条件的 Knex.js 和 SQL 的条件过滤器

C语言如何实现满足多条件匹配简单过滤问题

通过要求所有多个满足条件来过滤一对多查询

R plot 条件颜色(具有多个条件)

Pandas:过滤具有多个字符串条件的行[重复]