Rの{readxl}
をつかって.xlsx
ファイルを読み込んだときに、意図せず数値がPOSIXct
で読み込まれたことがあったのでメモしておく。
たとえばエクセルの次のようなデータ(東京ディズニーリゾートの年次入園者数とパスポート料金のデータ(DisneyData01.xmls
))をみてみる(入場者数はオリエンタルランドの公式入園者データより、パスポート料金はこちらから)。ただ、データは何でもいい。あくまで例として。
{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" ...
でこちらのデータ(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.xmls
(POSIXct
になってしまう方)は
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'
-
もちろん
col_types
を指定すると解決する。が、めっちゃwarrnig
でる。型違うの指定されてるよって。↩