ベクトルの特定のサブセットに基づいてサブセットを保存したい非常に大きなデータフレームがあります。要するに私はこのようなものを持っています:
> id<-c("ID1","ID2","ID2","ID3","ID4","ID4","ID4","ID4","ID4")
> status<-c("flag","flag","none","none","flag","flag","flag","none","flag")
> misc1ofmany<-c("etc1","etc2","etc3","etc4","etc5","etc6","etc7","etc8","etc9")
> df = data.frame(id, status, misc1ofmany) ; df
id status misc1ofmany
1 ID1 flag etc1
2 ID2 flag etc2
3 ID2 none etc3
4 ID3 none etc4
5 ID4 flag etc5
6 ID4 flag etc6
7 ID4 flag etc7
8 ID4 none etc8
9 ID4 flag etc9
フラグが立てられていないセッションを含め、フラグが立てられているIDのすべての行が必要です。現在、grepを使用して他のIDのインデックスを取得し、それを新しいdfにプラグインしようとしています。実際、私がこれを書いたとき、私はgreplがより扱いやすいかもしれないことを理解しました:
> flaggedIDs <- unique(as.vector(df$id[grep("flag",df$status)]))
> flaggedIDs.allStats.Index <- mapply(grepl,df$id,MoreArgs=list(x=flaggedIDs))
> flaggedIDs.allStats.Index
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[2,] FALSE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
[3,] FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE
しかし、私はここに行きたいだけです:
> flaggedIDsdf <- df[flaggedIDs.allStats.Index] ; flaggedIDsdf
id status misc1ofmany
1 ID1 flag etc1
2 ID2 flag etc2
3 ID2 none etc3
4 ID4 flag etc5
5 ID4 flag etc6
6 ID4 flag etc7
7 ID4 none etc8
8 ID4 flag etc9
私はこれを私が考えているよりも単純なはずだと感じていますが、私はこれを理解するために多くの可能性を試しましたが無駄になりました。質問を書くことは、これが私の頭の中でより明確で単純な問題になるのを助けました(私は今一歩を逃しているように見えます)が、今私はこれを行うためのより効率的な方法があるかどうか疑問に思っています。