撤消重塑为原始data.table格式

Dav*_*vid 1 r reshape data.table

鉴于以下数据表描述了AT和BE国家汽车制造的生产投入:

DT <- data.table( Abb=c("AT", "AT", "BE", "BE"),input=c("iron", "glass", "iron", "glass"),AT_Car=c(5,5,0,5),BE_Car=c(0,3,2,2))

> DT
   Abb input AT_Car BE_Car
1:  AT  iron      5      0
2:  AT glass      5      3
3:  BE  iron      0      2
4:  BE glass      5      2
Run Code Online (Sandbox Code Playgroud)

我使用了reshape函数来计算一些东西:

DT2 <- reshape(DT,direction='wide',idvar='Abb', timevar='input')

> DT2
   Abb AT_Car.iron BE_Car.iron AT_Car.glass BE_Car.glass
1:  AT           5           0            5            3
2:  BE           0           2            5            2
Run Code Online (Sandbox Code Playgroud)

修改后,我需要将DT2转换回DT的原始格式.我怎样才能做到这一点?

先感谢您.

Aru*_*run 6

data.tablev1.9.5开发版本具有datameltdcasttable.table方法的新功能.有关更多详细信息,请使用data.tables检查高效重塑,以及其他插图的入门Wiki.

Long-to-Wide - dcast接受多列:

require(data.table) # v1.9.5+
DT.c = dcast(DT, Abb ~ input, value.var = c('AT_Car', 'BE_Car'))
#    Abb AT_Car_glass AT_Car_iron BE_Car_glass BE_Car_iron
# 1:  AT            5           5            3           0
# 2:  BE            5           0            2           2
Run Code Online (Sandbox Code Playgroud)

从长到长 - melt也接受以下列表measure.vars:

DT.m = melt(DT.c, id = "Abb", measure.vars = patterns("^AT_Car", "^BE_Car"), 
             variable.name = "input", value.name = c("AT_Car", "BE_Car"))
setattr(DT.m$input, 'levels', c("glass", "iron"))
#    Abb input AT_Car BE_Car
# 1:  AT glass      5      3
# 2:  BE glass      5      2
# 3:  AT  iron      5      0
# 4:  BE  iron      0      2
Run Code Online (Sandbox Code Playgroud)