Hatena::ブログ(Diary)

My Life as a Mock Quant このページをアンテナに追加 RSSフィード Twitter

2017-07-11

長めのID(数値)を持つ場合は明示的に文字列で読む

| 09:04 | 長めのID(数値)を持つ場合は明示的に文字列で読むを含むブックマーク

例えばこういうファイル(hoge.csv)があったとする

id, value
31274832974983278756, 1.22

これをRで読み込と「あ、アレ?IDの下の桁変わってない???」となるわけだ。

> library("readr")
> df <- read_csv("hoge.csv")
> as.character(df$id)
[1] "31274832974983278592"

そういうときは、明示的に型を指定して文字列として読んでおけばOK。

> df <- read_csv("hoge.csv", col_types = list(col_character(), col_character()))
> df$id
[1] "31274832974983278756"

倍精度浮動小数点数は大体16桁くらいまでしかただしくないので、こういうことが起こるわけだ。

この手の問題を回避したかったらこの辺を参考にbit64 or gmpパッケージを使うのが良さげ化。

トラックバック - http://d.hatena.ne.jp/teramonagi/20170711/1499731499