我有一个包含多个列的 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))
我想提取一个多列表,该表显示特定类型 session 中每个价格的交易量 - 每列代表一个日期。
目前,我使用以下方法一次提取一个日期的数据:
DT[session==1,][date=="2012-10-17", sum(volume), by=price]
然后绑定(bind)列。
是否有一种方法可以获取最终产品(每列都引用特定日期的表格),而无需将所有单个查询粘在一起 - 正如我目前正在做的那样?
谢谢
最佳答案
以下内容是否符合您的要求。
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
如果您只想要 session 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
关于r - data.table 中的横截面子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13261240/