e-statが提供しているデータはエクセル形式です。このデータをRユーザーが使ってごにょごびょする際には、いくつかテコ入れをしてtidyなデータに作りなおす必要があります。その際、闇の深さに心が折れるとえくせるで操作し、データを作りなおすという事態に陥ってしまうので、なんとかデータの整形もRでやりたいです。
というわけで邪智暴虐なエクセルシートと格闘してみます。
今回はRPubs - 朝食抜きすぎでは?で使用しているデータと同じファイルを整形してみます。元リンク同様、e-statのデータを統計表一覧 政府統計の総合窓口- 朝食欠食率の年次推移(性・年齢階級別)からダウンロード(~/Downloadディレクトリに保存しました)
でははじめます。
# 使用するパッケージの読み込み
library("xlsx")
## Loading required package: rJava
## Loading required package: xlsxjars
library("dplyr")
##
## Attaching package: 'dplyr'
##
## The following object is masked from 'package:stats':
##
## filter
##
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library("DT")
xlsファイルの読み込みにはxlsxパッケージを使用しました。えくせるでファイルを開いて、どの行からどの行を読みこめば良いかを把握しておきます(こういう行政データは上にも下にもデータ以外の無駄な文字があったりする)。今回は8行目から23行目がデータ部分になります。
df <- read.xlsx("~/Downloads/60-1.xlsx", sheetIndex = 1, startRow = 8, endRow = 23) # データ行を選択
names(df)
## [1] "NA." "NA..1" "昭和50年1975" "X55年.1980"
## [5] "X60年.1985" "平成2年.1990" "X7年.1995" "X12年.2000"
## [9] "X13年.2001" "X14年.2002" "X15年.2003" "X16年.2004"
## [13] "X17年.2005" "X18年.2006" "X19年.2007" "X20年.2008"
## [17] "X21年.2009" "X22年.2010" "X23年.2011" "X24年.2012"
## [21] "NA..2" "NA..3"
Rは列名のはじめに数字がくるとXをつける可愛い子ですが、今回の場合はそのせいもあって列名がカオス(データがない列もあるし)なのでなんとかします。
df <- df[2:nrow(df), ] %>%
select(-1, -21, -22) # 無駄な部分を切り捨てる
colnames(df) <- c("年齢", substr(colnames(df), 6, 10)[2:19])
names(df)
## [1] "年齢" "1975" "1980" "1985" "1990" "995" "2000" "2001" "2002" "2003"
## [11] "2004" "2005" "2006" "2007" "2008" "2009" "2010" "2011" "2012"
colnamesで列名をつけなおしているのですが、元の列名の後ろが西暦で統一されていたので、そちらを利用しました(5年ごとのデータならseqでいけるなと思いきやそうでもないというワナ)。
最後に、いくつかの行に共通の値な「性別」列を付加します。
df$性別 <- rep(c("男性", "女性"), each = 7)
df <- select(df, 性別, 年齢, 2:20)え
df[, 3:20] %<>% round(3)
というわけで右葉曲折ありましたが、R上でデータの整形を行いました。えくせるの使用はデータの閲覧だけでおしまい!
datatable(df)