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)