2

我有一个包含多列的 data.table,如下所示:

DT <- data.table(date = as.IDate(rep(c("2012-10-17", "2012-10-18", "2012-10-19"), each=10)), 
                   session = c(1,2,3), price = c(10, 11, 12,13,14), 
                   volume = runif(30, min=10, max=1000)) 

我想提取一个多列表,该表显示特定类型会话中每个价格的交易量——每列代表一个日期。

目前,我使用以下方法一次提取一个数据:

DT[session==1,][date=="2012-10-17", sum(volume), by=price]

然后绑定列。

有没有一种方法可以在不将所有单个查询粘在一起的情况下获得最终产品(每列指向特定日期的表)——就像我目前正在做的那样?

谢谢

4

1 回答 1

2

以下内容是否符合您的要求。

reshape2和 data.table的组合

library(reshape2)

.DT <- DT[,sum(volume),by = list(price,date,session)][, DATE := as.character(date)]
# reshape2 for casting to wide -- it doesn't seem to like IDate columns, hence
# the character DATE co
dcast(.DT, session + price ~ DATE, value.var = 'V1')

    session price 2012-10-17 2012-10-18 2012-10-19
1        1    10   308.9528   592.7259         NA
2        1    11   649.7541         NA   816.3317
3        1    12         NA   502.2700   766.3128
4        1    13   424.8113   163.7651         NA
5        1    14   682.5043         NA   147.1439
6        2    10         NA   755.2650   998.7646
7        2    11   251.3691   695.0153         NA
8        2    12   791.6882         NA   275.4777
9        2    13         NA   111.7700   240.3329
10       2    14   230.6461   817.9438         NA
11       3    10   902.9220         NA   870.3641
12       3    11         NA   719.8441   963.1768
13       3    12   361.8612   563.9518         NA
14       3    13   393.6963         NA   718.7878
15       3    14         NA   871.4986   582.6158

如果你只是想要会话 1

dcast(.DT[session == 1L], session + price ~ DATE)

   session price 2012-10-17 2012-10-18 2012-10-19
1        1    10   308.9528   592.7259         NA
2        1    11   649.7541         NA   816.3317
3        1    12         NA   502.2700   766.3128
4        1    13   424.8113   163.7651         NA
5        1    14   682.5043         NA   147.1439
于 2012-11-06T23:59:54.837 回答