使用多个变量级别重塑 R 中的数据 - "aggregate function missing" 警告
Reshaping data in R with multiple variable levels - "aggregate function missing" warning
我正在尝试在 reshape2 中使用 dcast 将数据框从长格式转换为宽格式。数据是医院就诊日期和诊断列表。 (Dx.num 列出单次就诊的诊断顺序。如果是同一位患者 returns,则此变量重新开始,新就诊的初步诊断从 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"
)
)
当我 运行 这样做时,我收到警告 "Aggregate function missing, defaulting to 'length'" 和充满 0 和 1 的新数据帧。但是,数据框中没有重复的行。我开始认为我应该以完全不同的方式来处理这件事。
如有任何帮助,我们将不胜感激。
data.table 包扩展了 dcast
rowid
and allowing 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
我正在尝试在 reshape2 中使用 dcast 将数据框从长格式转换为宽格式。数据是医院就诊日期和诊断列表。 (Dx.num 列出单次就诊的诊断顺序。如果是同一位患者 returns,则此变量重新开始,新就诊的初步诊断从 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"
)
)
当我 运行 这样做时,我收到警告 "Aggregate function missing, defaulting to 'length'" 和充满 0 和 1 的新数据帧。但是,数据框中没有重复的行。我开始认为我应该以完全不同的方式来处理这件事。
如有任何帮助,我们将不胜感激。
data.table 包扩展了 dcast
rowid
and allowing 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