我使用R来分析来自多家医院的抗生素使用数据。
根据整洁的数据原则,我已将此数据导入到一个框架中。
>head(data)
date antibiotic usage hospital
1 2006-01-01 amikacin 0.000000 hospital1
2 2006-02-01 amikacin 0.000000 hospital1
3 2006-03-01 amikacin 0.000000 hospital1
4 2006-04-01 amikacin 0.000000 hospital1
5 2006-05-01 amikacin 0.937119 hospital1
6 2006-06-01 amikacin 1.002961 hospital1
(数据集为月度数据×5家医院×40种抗生素)
我想做的第一件事是将抗生素聚合成类。
> head(distinct(select(data, antibiotic)))
antibiotic
1 amikacin
2 amoxicillin-clavulanate
3 amoxycillin
4 ampicillin
5 azithromycin
6 benzylpenicillin
7 cefalotin
8 cefazolin
> penicillins <- c("amoxicillin-clavulanate", "amoxycillin", "ampicillin", "benzylpenicillin")
> ceph1 <- c("cefalotin", "cefazolin")
我想做的是根据这些抗生素类载体对数据进行分组:
filter(data, antibiotic =(any one of the values in the vector "penicillins")
感谢thelatemail指出如何做到这一点:
d <- filter(data, antibiotic %in% penicillins)
我希望数据能够以多种方式进行分析:
关键分析(和ggplot输出)是:
x =日期
<=> y =(药物)分层的抗生素的使用,由医院过滤我现在不清楚的是如何聚合这类数据。
例:
我想分析一下课程的使用情况&#34; ceph1&#34;在该地区的所有医院,导致(道歉 - 我知道这不是正确的代码)
x y
Jan-2006 for all in hospitals(usage of cephazolin + usage of cephalotin)
Feb-2006 for all in hospitals(usage of cephazolin + usage of cephalotin)
etc
而且,从长远来看,能够将参数传递给一个能让我选择哪家医院和哪种抗生素或一类抗生素的功能。
再次感谢 - 我知道这比原来的问题要复杂一个数量级!
答案 0 :(得分:0)
因此经过大量的试验和错误以及大量的阅读后,我已经设法解决了这个问题。
>str(data)
'data.frame': 23360 obs. of 4 variables:
$ date : Date, format: "2007-09-01" "2012-06-01" ...
$ antibiotic: Factor w/ 41 levels "amikacin","amoxicillin-clavulanate",..: 17 3 19 30 38 20 20 20 7 25 ...
$ usage : num 21.368 36.458 7.226 3.671 0.917 ...
$ hospital : Factor w/ 5 levels "hospital1","hospital2",..: 1 3 2 1 4 1 4 3 5 1 ...
所以我可以先对数据进行子集化:
>library(dplyr)
>penicillins <- c("amoxicillin-clavulanate", "amoxycillin", "ampicillin", "benzylpenicillin")
>d <- filter(data, antibiotic %in% penicillins)
然后使用更多dplyr进行总结(谢谢,Hadley!)
>d1 <- summarise(group_by(d, date), total = sum(usage))
>d1
Source: local data frame [122 x 2]
date total
(date) (dbl)
1 2006-01-01 1669.177
2 2006-02-01 1901.749
3 2006-03-01 2311.008
4 2006-04-01 1921.436
5 2006-05-01 1594.781
6 2006-06-01 2150.997
7 2006-07-01 2052.517
8 2006-08-01 2132.501
9 2006-09-01 1959.916
10 2006-10-01 1751.667
.. ... ...
>
> qplot(date, total, data = d1) + geom_smooth()
> [scatterplot as desired!]
下一步将尝试将其全部构建到一个函数中和/或尝试在线进行子集化,并以我在此处所做的为基础。