我认为这可能是一个非常简单的问题,但我真的是R的新手.
我有一个data.table
带键和许多行,其中两个可以设置为键.我想通过Key重新创建表.
例如,简单的数据.在这种情况下,关键是ID
和Act
,在这里我们总共可以得到4组.
ID ValueDate Act Volume 1 2015-01-01 EUR 21 1 2015-02-01 EUR 22 1 2015-01-01 MAD 12 1 2015-02-01 MAD 11 2 2015-01-01 EUR 5 2 2015-02-01 EUR 7 3 2015-01-01 EUR 4 3 2015-02-01 EUR 2 3 2015-03-01 EUR 6
这是生成测试数据的代码:
dd <- data.table(ID = c(1,1,1,1,2,2,3,3,3), ValueDate = c("2015-01-01", "2015-02-01", "2015-01-01","2015-02-01", "2015-01-01","2015-02-01","2015-01-01","2015-02-01","2015-03-01"), Act = c("EUR","EUR","MAD","MAD","EUR","EUR","EUR","EUR","EUR"), Volume=c(21,22,12,11,5,7,4,2,6))
更改后,每列应显示一个由Key(ID
和Act
)定义的特定组.
结果如下:
ValueDate ID1_EUR D1_MAD D2_EUR D3_EUR 2015-01-01 21 12 5 4 2015-02-01 22 11 7 2 2015-03-01 NA NA NA 6
非常感谢 !
您要做的不是重新创建data.table,而是将其从长格式重新定义为宽格式.你可以使用dcast
这个:
dcast(dd, ValueDate ~ ID + Act, value.var = "Volume")
这使:
ValueDate 1_EUR 1_MAD 2_EUR 3_EUR 1: 2015-01-01 21 12 5 4 2: 2015-02-01 22 11 7 2 3: 2015-03-01 NA NA NA 6
如果您希望在结果列中的数字前面加上ID
,那么您可以使用:
dcast(dd, ValueDate ~ paste0("ID",ID) + Act, value.var = "Volume")
这使:
ValueDate ID1_EUR ID1_MAD ID2_EUR ID3_EUR 1: 2015-01-01 21 12 5 4 2: 2015-02-01 22 11 7 2 3: 2015-03-01 NA NA NA 6