R言語による医療データ分析

R言語によるデータ分析のオンラインコースを中心に、さまざまなデータ分析について記載してあります。

034-036 パース(parse)(S3)

まとめ一覧

パースとは

parse_number(c("a",1,2,3))
parse_character(c("a","b","c",1,2,3))

#ベクトルは基本的には同じ型である必要がありました
 c(1,2,3,"a")
  • parse_**は、読み込んだ列に対して、型変換を行う関数です。
  • 通常、read_***関数が自動で処理をしてくれるので、意識しなくてもよいですが、自動処理に頼り切っていると落とし穴があります。

パースの落とし穴

#読み込んだデータは適当な変数名(DT)に放り込んでおきます。
 
DT <- read_csv("import_practice2.txt")


#色々と警告のメッセージが出ていますが、ここでは無視。

DT

#実行すると最初の10行をみることができます。
#read_delim(read_csv, read_tsv, read_csv2 等)で読み込むと、tibbleというデータフレームが強化された形となるのですが、最初は「ちょっと便利なデータフレーム」くらいの認識で問題ありません。

#col1~col4まで表示されていて<int> <chr>というのはその列がどんな型かが表示されています。

#DTというところをクリックしてみてください一番下までスクロールすると、NAという文字が出てきています。

#実は、自動パースは、デフォルトでは最初の1000行を見て判断するという形になっていますが、このファイルは、
#意図的に1010行目から3列目に文字列を、4列目に数字を入れてあります。

parse_number(c(1,2,3,4,5,"a","b","c"))

#色々と警告が出ていますが、無視して、結果は、
#>[1]  1  2  3  4  5 NA NA NA

#となっています。これは、数字に変換しようとしたら6-8番目のデータが数字に変換できなかったため、
#NA:Not Available; 欠損値として処理されたというものです。

#これと同様の事象が、DTの3列目でも発生しています。このような事象を回避するためには、いくつかやり方があります。

パース時のエラー回避方法1:判断に利用する行を増やす

  • guess_maxというオプションで行を増やすことができます。
#デフォルト
DT <- read_csv("import_practice2.txt", guess_max = c(1000))

tail(DT) 

#guess_maxを増やす
DT <- read_csv("import_practice2.txt",
               guess_max = c(99999))

tail(DT)  #col3がきちんと<chr>となり、NAではなくなっています。
  • この方法のデメリット:
    • 事前に行数がわからない場合は値を何にすればよいかわからない。
    • データによっては処理が重くなることも

パース時のエラー回避方法2:列毎に型を指定してあげる

DT <- read_csv("import_practice2.txt",
               col_types="iccc")

tail(DT)
  • デメリット:
    • 事前にどの列にどんなデータが入っているか知っている必要あり.
    • 事故的に文字列が数値と思っている列に紛れ込んでいるケースではNAとなってしまう。

パース時のエラー回避方法3:全部文字列としてとりあえず読み込む

DT <- read_csv("import_practice2.txt",col_types=cols(.default="c"))

tail(DT)
  • デメリット:
    • 後々自分で型変換を必要に応じて行う必要がある

個人的には、その3の方法を多用して読み込みを行っています。列の型変換、Section5のデータ加工を利用すれば、非常に簡単にできるので、インポート時点でデータが欠損することを避けることを重視しています。

以上でインポートセクションの説明終了です。次は、グラフの描画について説明します。

まとめ一覧