如何基于R中列的值组合排除行?

在我的数据框中,我有超过26万行。每个人(ID)都有4行,每年(2013年至2016年)一行。我的专栏有问题。每个ID只能在2013年使用“ 0”(我已经排除了在2013年使用“ 1”标识的ID)。此外,他们只允许在2014、2015和2016年使用“ 0”(因此是“ 0”的3倍),或者在2014、2015和2016年使用“ 1”(因此是3在“ 1”中的百分比)。如果在2014、2015和2016年混合使用“ 0”和“ 1”,则我想完全排除ID。

structure(list(Year = c(2013, 2014, 2015, 2016, 2013, 2014, 2015, 
2016, 2013, 2014, 2015, 2016, 2013, 2014, 2015, 2016), Value = c(0, 
0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1), ID = c(1, 1, 1, 
1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4), Gender = c(0, 0, 0, 0, 
0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1)), row.names = c(NA, -16L), class = c("tbl_df", 
"tbl", "data.frame")) 

tibble [16 x 4] (S3: tbl_df/tbl/data.frame)
 $ Year  : num [1:16] 2013 2014 2015 2016 2013 ...
 $ Value : num [1:16] 0 0 0 0 0 1 1 1 0 1 ...
 $ ID    : num [1:16] 1 1 1 1 2 2 2 2 3 3 ...
 $ Gender: num [1:16] 0 0 0 0 0 0 0 0 1 1 ...

我已经尝试使用filter / subset和| /&;进行一些操作。但我不知道。我的数据框中还有更多列,然后在上方显示。 希望有人可以帮助我。 谢谢!

评论
寂寞好了
寂寞好了

这样行吗?

dat %>%
  group_by(ID) %>%
  filter(all(Year == 2013 | Value == 0) | all(Year == 2013 | Value == 1)) %>%
  ungroup()
# # A tibble: 8 x 4
#    Year Value    ID Gender
#   <dbl> <dbl> <dbl>  <dbl>
# 1  2013     0     1      0
# 2  2014     0     1      0
# 3  2015     0     1      0
# 4  2016     0     1      0
# 5  2013     0     2      0
# 6  2014     1     2      0
# 7  2015     1     2      0
# 8  2016     1     2      0
点赞
评论