image.png
表中记录了两家医院在多年间分娩的产妇使用某种药物的信息。
要求计算出使用药物的产妇的比例,绘制成如下的图。
image.png
library("readxl")
library("ggplot2")
library("tidyverse")
library("stringr")
# Read-in data
df <- read_excel("data.xlsx", sheet = 1)#读取数据
str(df)#看看数据结构
tibble [305 x 5] (S3: tbl_df/tbl/data.frame)
$ patientid : num [1:305] 1 2 3 4 5 6 7 8 9 10 ...
$ Dateofdelivery : POSIXct[1:305], format: "2013-12-09" "2015-12-17" "2014-04-07" ...
$ Placeofdelivery: chr [1:305] "Hospital 2" "Hospital 2" "Hospital 2" "Hospital 2" ...
$ steroids : Factor w/ 2 levels "No","Yes": 2 2 2 2 2 2 2 2 2 2 ...
$ year : chr [1:305] "2013" "2015" "2014" "2012" ...
# extract year from date of delivery
df$year<-format(df$Dateofdelivery,"%Y")#规整年份的格式
# change numerical variable into factor
df$steroids<-factor(df$steroids,levels=c(0,1),labels=c("No","Yes"))
#将用药信息转为factor型,两个level
for_plot <- df[,c("Placeofdelivery","steroids","year")] %>% #取三个变量列
subset(steroids=="Yes")%>% #取其中用了药的子集
select(-"steroids")%>% table #再去掉用药信息列,用table函数统计
#用管道运算符连接多行代码
for_plot #看看结果 为两个医院各年用药人数总结
year
Placeofdelivery 2011 2012 2013 2014 2015 2016 2017 2018 2019
Hospital 1 4 1 2 4 4 2 4 5 3
Hospital 2 1 4 3 2 2 1 1 5 2
for_plot2 <- for_plot/as.numeric(table(df$"year"))
table(df$"year")#看看这个分子是啥
2011 2012 2013 2014 2015 2016 2017 2018 2019
20 24 39 28 31 29 34 54 46
for_plot2 #看看结果
year
Placeofdelivery 2011 2012 2013 2014 2015 2016 2017
Hospital 1 0.20000000 0.02564103 0.06451613 0.11764706 0.08695652 0.08333333 0.14285714
Hospital 2 0.04166667 0.14285714 0.10344828 0.03703704 0.10000000 0.02564103 0.03225806
year
Placeofdelivery 2018 2019
Hospital 1 0.17241379 0.05555556
Hospital 2 0.14705882 0.04347826
我们知道table函数的基本功能,如这里的table(df$"year")。
请看这个for_plot的内容,在这里我们巧用了table函数,一步就统计出了两个医院在各年的用药病例总数。
具体的学习材料和代码请在TB店铺:R语者,留言“table”获取。