【问题标题】:Aggregate function in R to create time series dataR中的聚合函数以创建时间序列数据
【发布时间】:2020-10-09 04:24:50
【问题描述】:

我正在处理一个包含 35 个变量的数据集。我已经导出了年龄虚拟变量类别,以将患者的年龄分为不同的年龄组。现在我想根据日期和位置变量汇总每个年龄段的病例总数和病例数。以下是我尝试过的代码,但是我没有得到每个年龄段的案例值的总和。例如,如果总共有 10 个病例,那么这 10 个病例应分为不同的年龄组,但出现了 NA。在某些情况下,少数年龄组出现 1 或 2 例病例,这并不代表总病例数。

df_sa2 <- aggregate( cbind(cases=df_sa1$cases, agecat1=df_sa1$agecat1, agecat2=df_sa1$agecat2, agecat3=df_sa1$agecat3, agecat4=df_sa1$agecat4, agecat5=df_sa1$agecat5), by = list(Date=df_sa1$date, location=df_sa1$location), FUN = sum)

我检查了它们都是数字的数据类型。

请提出代码有什么问题。谢谢。

【问题讨论】:

  • 如果您能提供reproducible example 会很有帮助,因为您很难准确理解您希望达到的目标。谢谢。

标签: r database aggregate grouping


【解决方案1】:

考虑aggregate 的公式样式,它可以更好地阅读并使用data 参数来避免大量的df_sa1$ 限定符。

对于公式样式,数字列放在~ 的左侧,分类变量放在右侧用于对列进行分组。这样做也会使cbindlist 变得不必要。

fml <- cases ~ date + location + agecat1 + agecat2 + agecat3 + agecat4 + agecat5

df_sa2 <- aggregate(fml, data=df_sa1, FUN=sum)

# TO ACCOUNT FOR POTENTIAL MISSING VALUES IN df_sa1$cases
df_sa2 <- aggregate(fml, data=df_sa1, FUN=function(x) sum(x, na.rm=TRUE), na.action=na.pass) 

如果您需要单独的年龄类别分组,请相应调整公式:

fml <- cases ~ date + location + agecat1
fml <- cases ~ date + location + agecat2
...
fml <- cases ~ date + location + agecat5

【讨论】:

  • 感谢您的宝贵建议,但是代码不起作用(FUN 错误,eval 错误(predvar,data,env)。另外,我想保留 agecat1,2,3,4 5 在公式的左侧。即我想对不同年龄类别的所有案例进行分类。
  • 最后我想要这样的东西:
  • 我赌了一把,在没有数据的情况下回答。请参阅上面有关设置可重现示例的评论。请编辑您的问题,不要在 cmets 中发布代码或数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-30
  • 2015-10-03
  • 2017-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多