2012-08-23 6 views
6

1つの列のみを持つデータフレームをフィルタリングしようとしています。これはとても似返されるベクタに結果:私は実際に欲しい1列のデータフレームをフィルタリングする

single.c <- data.frame(col1=c(1,2,3,4,5), row.names=C("r1","r2","r3","r4","r5")) 
single.c[single.c$col1 > 2,] 

[1] 3 4 5 

は、それが複数列のデータフレームのためにあるように、データが返されます。

multi.c <- data.frame(col1=c(1,2,3,4,5), col2=c(1,2,3,4,5), row.names=c("r1","r2","r3","r4","r5")) 
multi.c[multi.c$col2 > 2,] 

    col1 col2 
r3 3 3 
r4 4 4 
r5 5 5 

私はそれを返すために理にかなって見ることができますもし他の列がない場合はベクトルを返しますが、一般的には、その行に与えられた行が何であるかを確認したいと考えています。なぜこのようなことが起こりますか?rownamesを含む結果にデータフレームの形状を維持する簡単な方法はありますか?

答えて

10

は、選択関数にdrop引数を使用します。

single.c[single.c$col1 > 2, ,drop=F] 

# col1 
#r3 3 
#r4 4 
#r5 5 

ドキュメントから[のために:

ドロップ行列と配列の

。 TRUEの場合、結果は最小の ディメンションに強制的に強制されます(例を参照)。これは、置換のためではなく、 要素を抽出する場合にのみ機能します。詳細については、ドロップを参照してください。

+3

ありがとうございました。私は、ドキュメントが '? '[''! – MattLBeck

+2

素晴らしいもの!私はいつも、既存のdata.frameから単一の列を抽出してdata.frameを取得する方法を疑問に思ってきました!私は同じことをするdata.frame(col1 = multi.col $ col1、row.names = rownames(multi.col))を使用しています!ドー! –

関連する問題