R 扩展多个分组变量中的一个而不应用函数
在做一些我认为很简单的事情时,无论是tidyr、重塑还是重塑都有困难 有如下数据:R 扩展多个分组变量中的一个而不应用函数,r,reshape2,tidyr,R,Reshape2,Tidyr,在做一些我认为很简单的事情时,无论是tidyr、重塑还是重塑都有困难 有如下数据: agecat year Drug total <1 1999 Amikacin 12 <1 1999 Cefepime 3 <1 1999 Ceftazidime 13 <1
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
agecat年度药物总量
问题数据:
df <- structure(list(agecat = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,
2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("<1", "1-5"), class = "factor"),
year = c(1999L, 1999L, 1999L, 2000L, 2000L, 2000L, 2000L,
1999L, 1999L, 1999L, 1999L, 2000L, 2000L, 2000L), Drug = structure(c(1L,
2L, 3L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L), .Label = c("Amikacin",
"Cefepime", "Ceftazidime", "Ciprofloxacin"), class = "factor"),
total = c(12L, 3L, 13L, 3L, 6L, 3L, 4L, 37L, 25L, 38L, 38L,
52L, 34L, 45L)), .Names = c("agecat", "year", "Drug", "total"
), class = "data.frame", row.names = c(NA, -14L))
然而,根据评论,实际数据集有点不同。在给定的年份内,它似乎对agecat
和药物
进行了不止一次观察。因此,每种agecat药物
-年
组合的total
值不止一个。由于这些值需要以某种方式进行聚合,restrape2
抱怨:
缺少聚合函数:默认为长度
解决方案是对给定年份的agecat
和药物的值进行聚合,得到total
之和。这是通过设置fun.aggregate=sum
:
dcast(df, agecat + Drug ~ year, value.var = "total", fun.aggregate = sum)
您可以通过tidyr
的spread
实现您的目标:
library(tidyr)
spread(df, year, total)
agecat Drug 1999 2000
1 <1 Amikacin 12 3
2 <1 Cefepime 3 6
3 <1 Ceftazidime 13 3
4 <1 Ciprofloxacin NA 4
5 1-5 Amikacin 37 52
6 1-5 Cefepime 25 34
7 1-5 Ceftazidime 38 45
8 1-5 Ciprofloxacin 38 NA
library(tidyr)
价差(df、年份、总额)
agecat药物1999-2000
1您是否正在寻找reforme2::dcast(df,agecat+Drug~year,value.var=“total”)
?您好@user2706569,谢谢,我想是这样的,但出于某种原因,'value.var'参数不起作用,它说“聚合函数缺失:默认为长度”,这意味着每个条目都是1或2。在您显示的数据中,每年对每只agecat和每种药物只进行一次观察。在您的数据集中,情况似乎并非如此。因此,reformae2
询问您如何汇总agecat药物年观察值。每个梳只有一个观察值。年龄+年份+药物。我认为问题在于总数有时会重复,但是放置一个唯一的ID(1:n行)并运行agemUpdate:将原始表按“年”进行分组,然后按“agecat”进行分组,允许第一个重塑函数重塑2::dcast(df,agecat+药物~year,value.var=“total”)
工作!为什么?
dcast(df, agecat + Drug ~ year, value.var = "total", fun.aggregate = sum)
library(tidyr)
spread(df, year, total)
agecat Drug 1999 2000
1 <1 Amikacin 12 3
2 <1 Cefepime 3 6
3 <1 Ceftazidime 13 3
4 <1 Ciprofloxacin NA 4
5 1-5 Amikacin 37 52
6 1-5 Cefepime 25 34
7 1-5 Ceftazidime 38 45
8 1-5 Ciprofloxacin 38 NA