Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 基于分组条件筛选数据集_R_Dplyr - Fatal编程技术网

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