jnobuyukiのブログ

研究していて困ったことやその解決に関するメモ。同じように困ったあなたのために。twitter ID: @j_nobuyuki

Rのデータフレームから数値変数だけを抜き出したい

今回は,ありそうでなさそうなデータハンドリングに関して,メモ代わりにやり方を共有します。
Rを利用しながらデータ解析を行う際に,データフレームという数値変数も文字列変数も一緒に保存できる形式が便利です。便利なのを良いことに,順序をあまり考慮せずにデータフレームオブジェクトを作ってしまうと...。「20個ある変数の中で,2番めと4番目と5番目と9番目10番目11番目と18番目の変数が数値変数。あとは文字列変数。」といった複雑な状況が生じます。では,このような数値変数と文字列変数がまざったデータフレームオブジェクトから数値変数だけを抜き出す方法を考えてみましょう。

str関数はあまり役に立たない

str関数は,データフレームオブジェクトの中身の変数のクラスを表示してくれます。これを利用できそうな気がするのですが,どうもstr関数は,次の計算に使用可能な出力がありません。なので,結局目で見ながらメモをとることになってしまいます。

is.numeric関数を使いましょう

str関数がうまくいかないので,is.numeric関数を利用します。この関数は,引数として与えたベクトルオブジェクトが数値ベクトルのときにTRUE, そうでなければFALSEを返します。なので,次のようなコードで数値ベクトルかどうかの判断した結果を残せます。

res <- NULL

for  ( i in 1:ncol(data)){

    res <- append(res, is.numeric(data[,i]))    

}

あとは,データフレーム全体から,is.numeric関数の出力結果がTRUEの列番号の変数だけを抜けば良いでしょう。

subsetdata <- data[,which(res == TRUE)]


もっと簡単なやり方やそれを一度にできる関数をご存じの方がいらしたらぜひ教えてください。