knitr::opts_chunk$set(echo = TRUE) library(tidyverse) library(readxl) library(openxlsx)
https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/0000177221_00003.htmlより、 外来(院外)性年齢別薬効分類別数量
raw <- openxlsx::read.xlsx("../NDBdata/naifuku_gairai_ingai_sex_age.xlsx") head(raw)
最初の4行は無視して読み込む。
data <- openxlsx::read.xlsx("../NDBdata/naifuku_gairai_ingai_sex_age.xlsx")[-c(1:2),] # , skip=4, col_names = FALSE, col_types = ) head(data)
セル結合によって生まれた空欄を直前の値で埋め立て
data <- tidyr::fill(data, 1, 2) head(data)
性別でテーブルを横で切って縦に結合する。その際にカラム名もつける
raw[2,]
男性ゾーンは10~30行目。
data_male <- select(data, 1:30) %>% rename(!!!setNames(names(select(data, 1:30)), c(raw[1,1:9], raw[2,10:30]))) %>% mutate(sex=0) data_female <- select(data, 1:9, 31:51) %>% rename(!!!setNames(names(select(data, 1:9, 31:51)), c(raw[1,1:9], raw[2,10:30]))) %>% mutate(sex=1) data_sex <- bind_rows(data_male, data_female) head(data_sex)
data_tidy <- data_sex %>% pivot_longer(10:30, names_to = "age", values_to = "price") head(data_tidy)
tidyNDB_xlsx <- function(xlsx){ data <- openxlsx::read.xlsx(xlsx)[-c(1:2),] %>% tidyr::fill(1, 2) data_male <- select(data, 1:30) %>% rename(!!!setNames(names(select(data, 1:30)), c(raw[1,1:9], raw[2,10:30]))) %>% mutate(sex=0) data_female <- select(data, 1:9, 31:51) %>% rename(!!!setNames(names(select(data, 1:9, 31:51)), c(raw[1,1:9], raw[2,10:30]))) %>% mutate(sex=1) data_tidy <- bind_rows(data_male, data_female) %>% pivot_longer(10:30, names_to = "age", values_to = "price") return(data_tidy) }
data_tidy = tidyNDB_xlsx(xlsx="../NDBdata/naifuku_gairai_ingai_sex_age.xlsx") head(data_tidy)
library(arrow) write_parquet(data_tidy, "../NDBdata/naifuku_gairai_ingai_sex_age.parquet")
read_parquet("../NDBdata/naifuku_gairai_ingai_sex_age.parquet")
gh-pages
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.