f, n が data.frame だった場合にこれを1つにまとめようとして
でかいデータ結合したので、どこに問題が発生したのかさっぱり分からずしばらく途方に暮れてしまった。
ググってみたところ
どうもこれは、数値型に文字型(factor)を rbind() するのは問題ないが、
逆に、文字型(factor)に数値型を rbind() した場合に、それが出来ず当該の数値型データが NA として扱われるため、この警告が発生するらしい。
例えば以下のようなケース。
対処方法としては、追加する方のデータを sapply() で as.character に通すことで、数値を factor 化してから rbind () せよとの事。
具体的には以下のようにすれば良いらしい。
参考:
rbind(f, n)みたいなことをした場合に
Warning message: In `[<-.factor`(`*tmp*`, ri, value = c(5L, 5L, 7L, 7L, 1L, 1L, 1L, : 不正な因子水準です。NA が発生しましたみたいな警告が出る事がある。
でかいデータ結合したので、どこに問題が発生したのかさっぱり分からずしばらく途方に暮れてしまった。
ググってみたところ
どうもこれは、数値型に文字型(factor)を rbind() するのは問題ないが、
逆に、文字型(factor)に数値型を rbind() した場合に、それが出来ず当該の数値型データが NA として扱われるため、この警告が発生するらしい。
例えば以下のようなケース。
n=data.frame(x=c(1,2)) f=data.frame(x=c("alpha","bravo")) rbind(n,f) rbind(f,n)
> n=data.frame(x=c(1,2)) > f=data.frame(x=c("alpha","bravo")) > rbind(n,f) x 1 1 2 2 3 alpha 4 bravo > rbind(f,n) x 1 alpha 2 bravo 3 <NA> 4 <NA> Warning message: In `[<-.factor`(`*tmp*`, ri, value = c(1, 2)) : 不正な因子水準です。NA が発生しましたつまり因子水準でデータ保持してる factor に数値を放り込むなという事らしい。
対処方法としては、追加する方のデータを sapply() で as.character に通すことで、数値を factor 化してから rbind () せよとの事。
具体的には以下のようにすれば良いらしい。
rbind(f,sapply(n,as.character))
> rbind(f,sapply(n,as.character)) x 1 alpha 2 bravo 3 1 4 2
参考:
- もずくの勉強日記 / 2018-01-02: 1/2 毎日ずっとひだまりのなかでねてたい
タグ
コメントをかく