在 R 中:按组对具有值 0、1 和 2 的观测值进行子集化

In R: Subset observations that have values, 0, 1, and 2 by group

我有以下数据:

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) 中具有 0、1 和 2 的观察结果(按 companyID)进行子集化。我的首选结果如下所示:

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

提前感谢您的帮助!!

您可以 select 分组,其中 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]

我们可以使用

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