【问题标题】: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 语法来做到这一点呢?

【问题讨论】:

    标签: r filter dplyr group-by conditional-statements


    【解决方案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 
      

      【讨论】:

        猜你喜欢
        • 2014-09-01
        • 2020-01-31
        • 1970-01-01
        • 1970-01-01
        • 2021-11-30
        • 2012-12-04
        • 1970-01-01
        • 2021-07-29
        • 1970-01-01
        相关资源
        最近更新 更多