使用多个变量级别在R中重塑数据-“缺少汇总功能”警告

时间:2018-08-08 19:54:17

标签: r reshape2 dcast

我正在尝试在reshape2中使用dcast将数据帧从长格式转换为宽格式。数据是医院就诊日期和诊断列表。 (Dx.num列出了单次访问的诊断顺序。如果同一位患者返回,则该变量重新开始,新访问的主要诊断从1开始。)我希望每个人(id)一行。数据结构为:

id  visit.date  visit.id    bill.num    dx.code FY  Dx.num  
1   1/2/12      203         1234        409    2012  1      
1   3/4/12      506         4567        512    2013  1      
2   5/6/18      222         3452        488    2018  1      
2   5/6/18      222         3452        122    2018  2      
3   2/9/14      567         6798        923    2014  1 

我想我最终会遇到这样的列:

id, date_visit1, date_visit2, visit.id_visit1, visit.id_visit2,  bill.num_visit1, bill.num_visit2, dx.code_visit1_dx1, dx.code_visit1_dx2   dx.code_visit2_dx1, FY_visit1_dx1, FY_visit1_dx2, FY_visit2_dx1

最初,我尝试创建像这样的visit_dx列:

**visit.dx** 
v1dx1 (visit 1, dx 1)
v2dx1 (visit 2, dx 1)
v1dx1 (...)
v1dx2
v1dx1

并使用以下代码,从DF中删除“ Dx.num”,因为它是在“ visit.dx”中说明的:

    wide <-
    dcast(
    setDT(long),
    id + visit.date + visit.id + bill.num ~ visit.dx,
    value.var = c(
      "dx.code",
      "FY"
    )
  )

运行此命令时,出现警告“缺少聚合函数,默认为'length'”,并且新的数据帧充满了0和1。但是,数据框中没有重复的行。我开始认为我应该完全不同地去做。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

data.table包使用rowid扩展了dcast并允许multiple value.var,所以...

library(data.table)
dcast(setDT(DF), id ~ rowid(id), value.var=setdiff(names(DF), "id"))

   id visit.date_1 visit.date_2 visit.id_1 visit.id_2 bill.num_1 bill.num_2 dx.code_1 dx.code_2 FY_1 FY_2 Dx.num_1 Dx.num_2
1:  1       1/2/12       3/4/12        203        506       1234       4567       409       512 2012 2013        1        1
2:  2       5/6/18       5/6/18        222        222       3452       3452       488       122 2018 2018        1        2
3:  3       2/9/14         <NA>        567         NA       6798         NA       923        NA 2014   NA        1       NA