以下数据
ds <- read.table(header = TRUE, text ="
id year attend
1 2007 1
1 2008 1
1 2009 1
1 2010 1
1 2011 1
8 2007 3
8 2008 NA
8 2009 3
8 2010 NA
8 2011 3
9 2007 2
9 2008 3
9 2009 3
9 2010 5
9 2011 5
10 2007 4
10 2008 4
10 2009 2
10 2010 NA
10 2011 NA
")
ds<- ds %>% dplyr::mutate(time=year-2000)
print(ds)
如何编写dplyr :: filter()命令以仅保留不具有单个NA的ID?所以只有ids 1和9的受试者才能留在过滤器后面。
答案 0 :(得分:28)
或者您可以使用:
ds %>%
group_by(id) %>%
filter(attend=all(!is.na(attend)))
#Source: local data frame [10 x 3]
#Groups: id
# id year attend
#1 1 2007 1
#2 1 2008 1
#3 1 2009 1
#4 1 2010 1
#5 1 2011 1
#6 9 2007 2
#7 9 2008 3
#8 9 2009 3
#9 9 2010 5
#10 9 2011 5
答案 1 :(得分:8)
将filter
与base::ave
ds %>% dplyr::filter(ave(!is.na(attend), id, FUN = all))
获取
id year attend
1 1 2007 1
2 1 2008 1
3 1 2009 1
4 1 2010 1
5 1 2011 1
6 9 2007 2
7 9 2008 3
8 9 2009 3
9 9 2010 5
10 9 2011 5