※このブログに書いていることは、私の関わりある法人の意見ではなく、
 あくまでも、私個人の意見です。

2024年05月24日

R でデータの数値に「,」が入っている時に取り除く(gsub 関数 と as.numeric)



 先日、購入した


ですが、ダウンロードできるデータをいじってみようと思い、income.csv というのをダウンロードしてみました。

しかし、私のやり方が悪いのか、

> x <- read.csv("income.csv") # x という変数に income.csv を入れる
> str(x)  #データの構造を見る
'data.frame': 100 obs. of 7 variables:
$ id : chr "AU" "AY" "AB" "AM" ...
$ sex : chr "male" "female" "male" "male" ...
$ age : int 70 70 69 67 66 66 65 65 65 64 ...
$ height : num 160 156 173 166 171 ...
$ weight : num 58.3 44 75.7 69.3 76.5 67.3 41.5 53.5 46.8 52.7 ...
$ income : chr "201" "487" "424" "1,735" ...
$ generation: chr "elder" "elder" "elder" "elder" ...

となってしまい、肝心の income(収入)が chr(キャラクタ。文字列)になってしまい計算とかができません。

これは「,」が入っているせいだと考え、いろいろ調べたけれどよくわからず、ChatGPT 3.5 に尋ねてみたら

gsub 関数を教えてくれました。

あと、文字列を数値に変えるのは

as.numeric


> x$income <- as.numeric(gsub(",","",x$income)) #income の列データ内の「,」を取り除き、数値にしろ

とすると

> str(x) 'data.frame': 100 obs. of 7 variables:
$ id : chr "AU" "AY" "AB" "AM" ...
$ sex : chr "male" "female" "male" "male" ...
$ age : int 70 70 69 67 66 66 65 65 65 64 ...
$ height : num 160 156 173 166 171 ...
$ weight : num 58.3 44 75.7 69.3 76.5 67.3 41.5 53.5 46.8 52.7 ...
$ income : num 201 487 424 1735 929 ...
$ generation: chr "elder" "elder" "elder" "elder" ...

と、ちゃんと income 列のデータが数値になりました。

しかし・・・元データを自作して、それをお見せしつつやったほうがいいだろうと思い、自分で テキストエディタ、Excel, Numbers などで 数値の部分に「,」の入ったデータを作って読み込んでみたらどれもこれも

Column specification
Delimiter: ","chr (1): idnum (1): incomeℹ Use `spec()` to retrieve the full column specification for this data.ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.

列の指定
デリミタ ", "chr (1): idnum (1): income_2139 `spec()` を使用して、このデータの完全な列の仕様を取得します。

と警告が出てしまうのはなぜなんだろう・・・

でもって、警告は出るけれど、最初から numeric (数値)と認識してくれている。

まあ、数値内に「,」が入っているデータは作らないのが吉ですね。


posted by kingstone at 18:22| Comment(0) | TrackBack(0) | 統計 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック