R – rbindについて

rbind()で困った点

データフレームにrbindでアイテムを追加する場合、紹介されている例ではみな、データをベクトルで与えている(注:文字列型が勝手にFactor型にされてしまうのを4行目で回避している)。

一見するとうまくいっているが、実は問題がある。ageの項目が数字のはずだと内容を参照したり計算しようとすると・・・

となってしまう。

これはRのベクトルの仕様で、1つのベクトルの要素の型がすべて同じでなければならず、文字列型と数値型が混在した場合は数値が文字列に変換されてしまうため。

これを回避するために幾つかの方法があるが、たとえばここではas.numeric()を用いてみる。

うむ、うまくいっている、と思って、これに新たなデータを追加すると・・・

またしても怒られた。これはデータ追加のたびにベクトルの段階で文字列への変換が行われてしまうためらしく、上の9~10行目で前に数値型にしたはずのデータまで文字列に変換されてしまっている。

ベクトルではなくリストを使う

そこで、rbindでデータ群を与えるのに、ベクトルではなくリストを使ってみた。

見た目はベクトルの時と同じく、うまくいっているように見える。そこで各要素をチェックしてみると・・・

ちゃんと数値として扱われている。それでは新たにデータを追加しても大丈夫か。

問題なし。

よって、文字列と数値が混在する場合は、rbindの引数にはリストを使うべき。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です