8

列が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

他の列がない場合にベクトルを返すことは理にかなっていることがわかりますが、一般的には、どの行がその結果を与えているかを確認したいと思います。なぜこれが発生するのでしょうか。また、行名を含め、結果のデータフレームの形状を維持する簡単な方法はありますか?

4

1 に答える 1

13

dropselect関数の引数を使用します。

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

#   col1
#r3    3
#r4    4
#r5    5

のドキュメントから[

落とす

行列と配列の場合。TRUEの場合、結果は可能な限り低い次元に強制変換されます(例を参照)。これは要素の抽出に対してのみ機能し、置換に対しては機能しません。詳細については、ドロップを参照してください。

于 2012-08-23T11:56:46.097 に答える