【发布时间】:2015-08-21 07:55:10
【问题描述】:
无法让 tidyr、reshape 或 reshape2 完成我认为简单的事情。
拥有如下所示的数据:
agecat year Drug total
<1 1999 Amikacin 12
<1 1999 Cefepime 3
<1 1999 Ceftazidime 13
<1 2000 Amikacin 3
<1 2000 Cefepime 6
<1 2000 Ceftazidime 3
<1 2000 Ciprofloxacin 4
1-5 1999 Amikacin 37
1-5 1999 Cefepime 25
1-5 1999 Ceftazidime 38
1-5 1999 Ciprofloxacin 38
1-5 2000 Amikacin 52
1-5 2000 Cefepime 34
1-5 2000 Ceftazidime 45
..但更长的时间,有 4 个年龄猫,14 年(1999-2012 年)和 10 种药物,每种都有唯一的总数。我想传播“年份”并保持总数,基本上是为了按药物对agecat的趋势有一个广泛的“时间表”。即
agecat drug 1999 2000
<1 Amikacin 23 3
<1 Cefepime 3 6
当只有两个分组变量时,我在 tidyr 中的传播非常幸运,但是添加第三个似乎会全部结束...我得到一个稀疏矩阵或名称匹配错误。使用melt/dcast,我尝试添加一个ID列(1:n行)但仍然没有成功......当我不想更改数据时,我无法理解应用什么功能,只需制作它宽幅。我错过了什么?谢谢!
【问题讨论】:
-
您在寻找
reshape2::dcast(df, agecat + Drug ~ year, value.var = "total")吗? -
嗨@user2706569,谢谢,我是这么认为的,但由于某种原因,“value.var”参数不起作用,它显示“缺少聚合函数:默认为长度”,这意味着每个条目都是1 或 2。
-
在您显示的数据中,每个agecat 每年和药物只有一个观察值。在您的数据集中,情况似乎并非如此。因此,
reshape2会询问您如何汇总 agecat-drug-year 观察值。 -
每个梳子只有一个观察值。 agecat + 年份 + 药物。我认为问题在于总数有时会重复,但放置一个唯一 ID(1:n 行)并运行
> agem<-dcast(age, agecat + Drug + ID ~ year, value.var = 'total')会导致矩阵稀疏。 -
更新:将原来的表格改成按 'year' 分组,然后按 'agecat' 允许第一个 reshape 函数
reshape2::dcast(df, agecat + Drug ~ year, value.var = "total")工作!为什么?!