備忘ログ

チラシの裏的備忘録&メモ

Rの`{readxl}`をつかって`.xlsx`ファイルを読み込んだときに、意図せず数値が`POSIXct`で読み込まれたことがあったのでメモ

Rの{readxl}をつかって.xlsxファイルを読み込んだときに、意図せず数値がPOSIXctで読み込まれたことがあったのでメモしておく。

たとえばエクセルの次のようなデータ(東京ディズニーリゾートの年次入園者数とパスポート料金のデータ(DisneyData01.xmls))をみてみる(入場者数はオリエンタルランドの公式入園者データより、パスポート料金はこちらから)。ただ、データは何でもいい。あくまで例として。

f:id:indenkun:20210611201418p:plain

{readxl}read_xmls()で読み込んでみる。

# データを一つ上のディレクトリにしていていたので"../DisneyData01.xlsx"で指定する
DisneyData01 <- readxl::read_xlsx("../DisneyData01.xlsx")
# `str()`で中身を確認してみる
str(DisneyData01)
## tibble [37 x 3] (S3: tbl_df/tbl/data.frame)
##  $ 年                 : num [1:37] 1983 1984 1985 1986 1987 ...
##  $ 入園者数           : num [1:37] 9933000 10013000 10675000 10665000 11975000 ...
##  $ 1デーパスポート値段: POSIXct[1:37], format: "1910-09-04" "1910-09-04" ...

1デーパスポートの値段がPOSIXctになっている1

でこちらのデータ(DisneyData02.xmls)みてみる。

同様に{readxl}read_xmls()で読み込んでみる。

# データを一つ上のディレクトリにしていていたので"../DisneyData02.xlsx"で指定する
DisneyData02 <- readxl::read_xlsx("../DisneyData02.xlsx")
# `str()`で中身を確認してみる
str(DisneyData02)
## tibble [37 x 3] (S3: tbl_df/tbl/data.frame)
##  $ 年                 : num [1:37] 1983 1984 1985 1986 1987 ...
##  $ 入園者数           : num [1:37] 9933000 10013000 10675000 10665000 11975000 ...
##  $ 1デーパスポート値段: num [1:37] 3900 3900 3900 3900 4200 4200 4400 4400 4400 4800 ...

ちゃんと1デーパスポート値段が数値になっている。

両者の違いは

DisneyData01.xmlsPOSIXctになってしまう方)は

DisneyData02.xmls(数値で読み込める方)は

と数値の形式の箇所が異なっている。

数値の形式を数値にしているのになんでかPOSIXctになってしまう模様。

xmlsファイルは中身が覗けるのでちょっとみてみたが、知識不足でよくわからなかった。日本語範囲で簡単に検索した限りでもこのことに言及されているものは見つけられなかった。

{readxl}のバージョン依存かもしれないので使ったバージョンとRのバージョンを記載しておく。

version
##                _                           
## platform       x86_64-w64-mingw32          
## arch           x86_64                      
## os             mingw32                     
## system         x86_64, mingw32             
## status                                     
## major          4                           
## minor          1.0                         
## year           2021                        
## month          05                          
## day            18                          
## svn rev        80317                       
## language       R                           
## version.string R version 4.1.0 (2021-05-18)
## nickname       Camp Pontanezen
packageVersion("readxl")
## [1] '1.3.1'

  1. もちろんcol_typesを指定すると解決する。が、めっちゃwarrnigでる。型違うの指定されてるよって。