【问题标题】:cross sectional sub-sets in data.tabledata.table 中的横截面子集
【发布时间】:2012-11-06 23:48:24
【问题描述】:

我有一个包含多列的 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]

然后绑定列。

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

谢谢

【问题讨论】:

  • 我是误会还是DT[,sum(volume),by = list(price,date,session)]不行?
  • @mnel - 我认为 OP 正在讨论将列(“每列引用特定日期的表”)而不是行绑定在一起。我同样感到困惑。
  • 咳咳,是的,绑定列 - 所以你根本不会误解我的意思。我实际上只是想要DT[ session == 1, sum(volume), by = list(date, price)],并且可以从那里将其剪切成我想要的每个日期的列。请随时回答,以便我接受。
  • 查看我的答案 -- 使用 dcast 进行整形。

标签: r data.table


【解决方案1】:

以下是否符合您的要求。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-26
    • 2019-06-28
    • 2013-01-08
    • 1970-01-01
    • 2017-10-16
    • 1970-01-01
    • 2021-06-25
    • 2014-11-08
    相关资源
    最近更新 更多