我认为这可能是一个非常简单的问题,但我确实是R的新手。
我有一个带有键和许多行的data.table
,其中两行可以设置为键。我想通过键重新创建表。
例如,简单数据。在这种情况下,键是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
关于r - 如何通过键重新创建表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34095825/