library(readxl)
library(tidyr)
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ ggplot2 3.3.6 ✔ dplyr 1.0.9
## ✔ tibble 3.1.8 ✔ stringr 1.4.1
## ✔ readr 2.1.2 ✔ forcats 0.5.2
## ✔ purrr 0.3.4
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
library(ggplot2)
library(tableone)
library(ggsci)
library(RColorBrewer)
library(scales)
##
## 次のパッケージを付け加えます: 'scales'
##
## 以下のオブジェクトは 'package:purrr' からマスクされています:
##
## discard
##
## 以下のオブジェクトは 'package:readr' からマスクされています:
##
## col_factor
library(lubridate)
##
## 次のパッケージを付け加えます: 'lubridate'
##
## 以下のオブジェクトは 'package:base' からマスクされています:
##
## date, intersect, setdiff, union
library(dplyr)
glimpse(ds1)
tbl1<-CreateTableOne(vars="年齢階級", factorVars="年齢階級", data=ds1)
tbl1
##
## Overall
## n 356
## 年齢階級 (%)
## 0歳代 29 ( 8.1)
## 10歳代 5 ( 1.4)
## 20歳代 7 ( 2.0)
## 30歳代 10 ( 2.8)
## 40歳代 15 ( 4.2)
## 50歳代 34 ( 9.6)
## 60歳代 95 (26.7)
## 70歳代 85 (23.9)
## 80歳代 57 (16.0)
## 90歳以上 19 ( 5.3)
g_bars1<-ggplot(data=ds1,aes(x=年齢階級))+
geom_bar(fill="blue", color="black", width=0.3)+
coord_flip()
g_bars1
(不明点)60歳代だけオレンジに塗る方法がわからない
tbl2<-CreateTableOne(vars="OPE", strata="MDC", data=ds1)
tbl2
## Stratified by MDC
## 01 02 03 04 05
## n 41 1 8 42 65
## OPE (mean (SD)) 0.39 (0.49) 1.00 (NA) 1.00 (0.00) 0.29 (0.46) 0.80 (0.40)
## Stratified by MDC
## 06 07 08 09 10
## n 46 6 8 1 13
## OPE (mean (SD)) 0.76 (0.43) 0.33 (0.52) 1.00 (0.00) 1.00 (NA) 0.00 (0.00)
## Stratified by MDC
## 11 12 13 15 16
## n 21 3 1 8 33
## OPE (mean (SD)) 0.19 (0.40) 1.00 (0.00) 0.00 (NA) 1.00 (0.00) 0.94 (0.24)
## Stratified by MDC
## 17 18 p test
## n 2 2
## OPE (mean (SD)) 1.00 (0.00) 1.00 (0.00) NA
ds2 <- ds1 %>% mutate(f_OPE=as.factor(OPE))
g_bars2<-ggplot(data=ds2,aes(x=MDC,fill=f_OPE)) +
geom_bar(position = "dodge")
g_bars2
(不明点)全般的にそうだが、グラフのNAが邪魔!!
g_bars3<-ggplot(data=ds2,aes(x=MDC,fill=f_OPE)) +
geom_bar(position = "fill")+
scale_y_continuous(labels = percent)
g_bars3
postion=“fill”で割合の積み上げ棒グラフになる scale_y_continuous(labels = percent)でパーセントを表示する
ds3<-ds2 %>%
mutate(入院日_1=as.numeric(入院年月日...8),退院日_1=as.numeric(退院年月日))
ds4<-ds3 %>%
mutate(入院日_ymd=ymd(入院日_1), 退院日_ymd=ymd(退院日_1))
ds5<-ds4 %>% mutate(在院日数=退院日_ymd-入院日_ymd+1)
ds6<-ds5 %>% mutate(在院日数_1=as.numeric(在院日数))
summary(ds6$在院日数_1)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.00 5.00 9.00 14.93 17.00 88.00
tbl3<-ds6 %>% group_by(MDC) %>%
summarise(平均在院日数=mean(在院日数_1))
tbl3
## # A tibble: 18 × 2
## MDC 平均在院日数
## <chr> <dbl>
## 1 01 20.9
## 2 02 6
## 3 03 20.5
## 4 04 15.6
## 5 05 11.2
## 6 06 16.0
## 7 07 15.3
## 8 08 24
## 9 09 3
## 10 10 15
## 11 11 15.7
## 12 12 8.67
## 13 13 12
## 14 15 18.5
## 15 16 15.2
## 16 17 2
## 17 18 13
## 18 <NA> 11.5
(不明点)ymd形式のデータのsummarize方法がわかんないから、無理やり数値データに変換した。
g_bars4<-ggplot(data=tbl3,aes(x=MDC, y=平均在院日数))+
geom_bar(fill="blue",stat = "identity", width=0.5)+
scale_y_continuous(limit=c(0,30))
g_bars4
tbl4<-CreateTableOne(vars="退院先", factorVars="退院先", data=ds6)
tbl4
##
## Overall
## n 356
## 退院先 (%)
## 1 220 (61.8)
## 2 42 (11.8)
## 3 6 ( 1.7)
## 4 45 (12.6)
## 5 7 ( 2.0)
## 6 2 ( 0.6)
## 7 8 ( 2.2)
## 8 26 ( 7.3)
大腿骨骨折のICDコードはS72~~
ds7 <- ds6 %>% filter(入院後発症ICD10コード1>="S72" | 入院後発症ICD10コード2>="S72" |
入院後発症ICD10コード3>="S72" | 入院後発症ICD10コード4>="S72" |
入院後発症ICD10コード5>="S72" | 入院後発症ICD10コード6>="S72" |
入院後発症ICD10コード7>="S72" | 入院後発症ICD10コード8>="S72" |
入院後発症ICD10コード9>="S72" | 入院後発症ICD10コード10>="S72")
tbl5<- CreateTableOne(vars="65歳以上高齢者", factorVars="65歳以上高齢者", data=ds7)
tbl5
##
## Overall
## n 128
## 65歳以上高齢者 = 1 (%) 63 (49.2)
tbl6<-CreateTableOne(vars="65歳以上高齢者", factorVars="65歳以上高齢者", data=ds6)
tbl6
##
## Overall
## n 356
## 65歳以上高齢者 = 1 (%) 192 (53.9)
以上より、65歳以上は63/192、65歳未満は65/164・・・ 回答より多すぎ!?
ds7 <- ds6 %>% filter(脳卒中の発症時期==1 & grepl("I63", 主傷病ICD10コード))
ds8 <- ds7 %>% mutate(脳卒中での死亡=case_when(退院時転帰==6~ "退院時死亡", 退院時転帰==7~ "退院時死亡"))
tbl7<- CreateTableOne(vars="脳卒中での死亡", data=ds8)
tbl7
##
## Overall
## n 18
## 脳卒中での死亡 = 退院時死亡 (%) 4 (100.0)
(不明点)前方一致のため、filter(grepl(“1”))とやっても、前方に”I”がついているものが全て抽出されてしまった。
I63↩︎