当前位置:  开发笔记 > 编程语言 > 正文

如何按键重新创建表格?

如何解决《如何按键重新创建表格?》经验,为你挑选了1个好方法。

我认为这可能是一个非常简单的问题,但我真的是R的新手.

我有一个data.table带键和许多行,其中两个可以设置为键.我想通过Key重新创建表.

例如,简单的数据.在这种情况下,关键是IDAct,在这里我们总共可以得到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(IDAct)定义的特定组.

结果如下:

 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

非常感谢 !



1> Jaap..:

您要做的不是重新创建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

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有