0-1. 必要パッケージ

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)

0-2. データファイルの読み込み

0-3. データの確認

glimpse(ds1)

1. 年齢階級別の退院患者数グラフ

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歳代だけオレンジに塗る方法がわからない

2. MDC別の手術の有無を棒グラフで示す

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が邪魔!!

3.MDC別の手術を積み上げ棒グラフで示す(割合)

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)でパーセントを表示する

4.MDC別平均在院日数を棒グラフで示す

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

5.退院経路を集計

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)

6.65歳以上の入院中の大腿骨骨折

大腿骨骨折の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・・・ 回答より多すぎ!?

7.入院3日以内に発症した急性脳梗塞の入院死亡の集計

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”がついているものが全て抽出されてしまった。


  1. I63↩︎