【问题标题】:In R: Subset observations that have values, 0, 1, and 2 by group在 R 中:按组具有值 0、1 和 2 的子集观测值
【发布时间】:2021-07-12 17:31:13
【问题描述】:

我有以下数据:

companyID   status
    1         1
    1         1
    1         0
    1         2
    2         1
    2         1
    2         1
    3         1
    3         0
    3         2
    3         2
    3         2

并且希望将这些观察(按 companyID)子集化,其中状态在整个组(companyID)中具有 0、1 和 2。我的首选结果如下所示:

companyID   status
    1         1
    1         1
    1         0
    1         2
    3         1
    3         0
    3         2
    3         2
    3         2

提前感谢您的帮助!!

【问题讨论】:

    标签: r dplyr subset


    【解决方案1】:

    您可以选择组中包含 0-2 的所有值的组。

    library(dplyr)
    df %>% group_by(companyID) %>%filter(all(0:2 %in% status))
    
    #  companyID status
    #      <int>  <int>
    #1         1      1
    #2         1      1
    #3         1      0
    #4         1      2
    #5         3      1
    #6         3      0
    #7         3      2
    #8         3      2
    #9         3      2
    

    在基础 R 和 data.table 中:

    #Base R : 
    subset(df, as.logical(ave(status, companyID, FUN = function(x) all(0:2 %in% x))))
    
    #data.table
    library(data.table)
    setDT(df)[, .SD[all(0:2 %in% status)], companyID]
    

    【讨论】:

      【解决方案2】:

      我们可以使用

      library(dplyr)
      df %>%
             group_by(companyID) %>%
             filter(sum(0:2 %in% status) == 3)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-01-08
        • 2022-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-06
        • 2019-02-15
        相关资源
        最近更新 更多