2014-07-05 30 views
13

निम्न डेटाdplyr :: फिल्टर()

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 :: फिल्टर() आदेश कैसे लिख सकता हूँ केवल आईडी है कि एक की जरूरत नहीं है रखने के लिए होगा एकल एनए? तो फ़िल्टर के बाद केवल 1 और 9 वाले विषयों को रहना चाहिए। base::ave

ds %>% dplyr::filter(ave(!is.na(attend), id, FUN = all)) 

साथ संयोजन के रूप में

+0

आप 1 और 9 मतलब है? –

उत्तर

7

उपयोग filter

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 
+0

हां, 1 और 9, मैंने इसे पहले ही ठीक कर दिया है। धन्यवाद, @Robert Krzyzanowski, यह वही है जो मुझे चाहिए था। मैंने पहले कभी भी एवी() फ़ंक्शन का उपयोग नहीं किया, मुझे खुशी है कि मैंने पूछा, कुछ नया सीखा। – andrey

+0

धन्यवाद! ऊपर उठाने के लिए मत भूलना। :) –

+0

मैं इसे स्वीकार करने के लिए 2 मिनट का इंतजार कर रहा था :) धन्यवाद! – andrey

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 
+0

मुझे यह बेहतर पसंद है, क्योंकि यह dplyr के भीतर रहता है और छोटा है। धन्यवाद! – andrey

+8

'sum (is.na (उपस्थित)) == 0' भी – hadley

+0

पर काम करेगा धन्यवाद @ हडली टिप्पणी के लिए। – akrun