R 基于分组条件筛选数据集
这可能是一个愚蠢的问题,但我不知道如何过滤R 基于分组条件筛选数据集,r,dplyr,R,Dplyr,这可能是一个愚蠢的问题,但我不知道如何过滤df,以保持id所在的行与因子A的所有级别中存在的条件相匹配: df = data.frame(id = c(1,1,1,2,2,3,3), factor_A = c(1,2,3,1,2,1,3)) 所需的df1将仅保留包含id=1的行,因为它存在于因子_A=1、2和3中: id factor_A 1 1 1 2 1 2 3 1 3 这应该可以 libr
df
,以保持id所在的行与因子A的所有级别中存在的条件相匹配:
df = data.frame(id = c(1,1,1,2,2,3,3),
factor_A = c(1,2,3,1,2,1,3))
所需的df1将仅保留包含id=1的行,因为它存在于因子_A=1、2和3中:
id factor_A
1 1 1
2 1 2
3 1 3
这应该可以
library(dplyr)
df = data.frame(id = c(1,1,1,2,2,3,3),
factor_A = c(1,2,3,1,2,1,3))
df %>% group_by(id) %>%
filter(length(unique(factor_A)) == length(unique(df$factor_A)))
我建议采用
dplyr
方法。您可以计算每个id的级别数,然后进行筛选。由于您的因子变量有3个级别,您将保持标志
为3的行:
library(dplyr)
#Data
df = data.frame(id = c(1,1,1,2,2,3,3),
factor_A = c(1,2,3,1,2,1,3))
#Create flag
df %>% group_by(id) %>%
#Count levels
mutate(Flag=n_distinct(factor_A)) %>%
#Filter only rows with 3
filter(Flag==3) %>% select(-Flag)
输出:
# A tibble: 3 x 2
# Groups: id [1]
id factor_A
<dbl> <dbl>
1 1 1
2 1 2
3 1 3
#一个tible:3 x 2
#分组:id[1]
id因子_A
1 1 1
2 1 2
3 1 3
我们可以使用基本R
subset(df, id %in% names(which(!rowSums(!table(df) > 0))))
# id factor_A
#1 1 1
#2 1 2
#3 1 3