在 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)
我有以下数据:
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)