以下のデータについて
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)
NAが1つもないIDのみを保持するdplyr :: filter()コマンドを作成するにはどうすればよいですか?したがって、IDが1と9のサブジェクトのみがフィルターの後に留まる必要があります。
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
または、次を使用できます。
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