2017-06-13 8 views
0

私はこのデータフレームを持っているデータフレームからエンティティを選択します。ダミー変数が1に少なくとも一度

df=data.frame(student=c(rep("John",6),rep("Meredith",7),rep("Jeremy",5),rep("Audrey",8)), 
       semester=c(1,2,3,4,5,6, 1,2,3,4,5,6,7, 1,2,3,4,5, 1,2,3,4,5,6,7,8), 
       addQual=c(1,0,0,0,1,0, 0,0,0,0,0,0,0, 0,0,1,0,1, 0,0,0,0,0,0,0,0)) 

それは、彼らは追加の資格コースを取ったかどうかを学生、すべての学期と学期ごと用が含まれています(ダミー変数addQual = 1の場合は1になります)。 追加の資格コースに参加した学生のみが含まれるデータフレームdfFiltを取得するにはどうすればよいですか?

私の所望の出力は、したがって、次のようになります。dplyrで

dfFilt=data.frame(student=c(rep("John",6),rep("Jeremy",5)), 
       semester=c(1,2,3,4,5,6, 1,2,3,4,5), 
       addQual=c(1,0,0,0,1,0, 0,0,1,0,1)) 

溶液が好ましいです。 dplyr

答えて

1

dfFilt = df %>% group_by(student) %>% filter(sum(addQual)>=1) 

    student semester addQual 
    <fctr> <dbl> <dbl> 
1 John  1  1 
2 John  2  0 
3 John  3  0 
4 John  4  0 
5 John  5  1 
6 John  6  0 
7 Jeremy  1  0 
8 Jeremy  2  0 
9 Jeremy  3  1 
10 Jeremy  4  0 
11 Jeremy  5  1 
+0

感謝!私はこれを思いついたわけではありません...私はそれを見て、将来の来訪者のためにこれに少し追加しました: '%>%filter(any(addQual == 1))'も同様に働きます – Alias

2

ベースR・ソリューション

df[which(df$student %in% df$student[which(df$addQual >0)]), ] 
    student semester addQual 
1  John  1  1 
2  John  2  0 
3  John  3  0 
4  John  4  0 
5  John  5  1 
6  John  6  0 
14 Jeremy  1  0 
15 Jeremy  2  0 
16 Jeremy  3  1 
17 Jeremy  4  0 
18 Jeremy  5  1 
関連する問題