いろいろ倉庫

KNIME、EXCEL、R、Pythonなどの備忘録

【R】データの型を確認したり変更したりしたい

・お題:データの型が合わないと、うまく処理してくれない。データの型の確認方法や、変更方法をメモしておきたい。

 

・とりあえず、オブジェクトを作ってみる。

> a<-1
> b<-"2"

 

・それぞれのオブジェクトの型を確認する。Rではclass関数で出てくるっぽい。もっと正確には、以下のサイトのように型の概念が存在するらしい。

qiita.com

・とりあえず、class関数でみてみる。

> class(a)
[1] "numeric"
> class(b)
[1] "character"

 

・例えば、それぞれのオブジェクトに1を足したいが、そのまま1を足すと案の定、characterで認識されているbでエラーが出た。

> a+1
[1] 2
> b+1
Error in b + 1 : non-numeric argument to binary operator

 

・Rで型を変更する場合、as.関数を使う。これには非常に多くの関数が用意されており、as.まで入力すると候補がたくさん出てくる。ここから選んで使えばOKっぽい。

 

・例えば、文字列として認識されているbを数字の2として認識させたければ、as.numeric関数を使えばいけそう。ただし、数字の2にはなるけれど、bに数字の2が代入されるわけではないので、代入してあげる必要がある。

> b<-as.numeric(b)
> b
[1] 2

 

・文字列を処理する際に、paste関数でくっつけることがある。numeric型だとうまくいかないからcharacterにしなきゃなぁ、、と思ったところ、何故かうまくいく。例が悪かったけれど、as.character関数があるので、これで文字に型を変えられる。

> paste("A","B",sep="")
[1] "AB"

> paste("a",a,sep="")#なんかできた。
[1] "a1"

> as.character(a)
[1] "1"

 

・データフレームでもやってみる。とりあえず、データフレームを作る。

> col1<-c("1","2","3","4")
> col2<-c("a","b","c","d")
> df<-data.frame(col1,col2)
> df
  col1 col2
1    1    a
2    2    b
3    3    c
4    4    d
> str(df)
'data.frame':    4 obs. of  2 variables:
 $ col1: chr  "1" "2" "3" "4"
 $ col2: chr  "a" "b" "c" "d"

 

・col1をnumericに変更してみる。

> df$col2<-as.numeric(df$col2)
> str(df)
'data.frame':    4 obs. of  2 variables:
 $ col1: num  1 2 3 4
 $ col2: chr  "a" "b" "c" "d"

 

・ちなみに、col2を無理やりnumericに変えてみると、NAになる。coercionは無理やりデータ型を変えられちゃいました、ということらしく、NAは一応numericらしい。データが飛んでしまった。

> as.numeric(df$col2)
[1] NA NA NA NA
Warning message:
NAs introduced by coercion 

 

・これを何とかするには、データ型によって処理を変える必要が出てくるのかなと思う。is.関数で、そのデータの型が何か調べられるっぽい。

> is.numeric(1.234)
[1] TRUE

> is.numeric("1.234")
[1] FALSE

> is.numeric("a")
[1] FALSE

 

・データ型が混在して入力したベクトルは、例えば以下の例だとcharacterになったりする。ベクトルはデータ型の混在を許容しないので、仕方なしで変えてくれるっぽい。

> test<-c(1,2,"3","d")

> str(test)
 chr [1:4] "1" "2" "3" "d"

 

・では、これをas.numericするとどうなるか。数字にできるものは数字にして、無理っぽいのはNAに強制的に変換してくれる。

> as.numeric(test)
[1]  1  2  3 NA

 

 

おわり。