Reshape2 dcast()函数返回错误的值

时间:2015-06-25 14:04:45

标签: r pivot reshape reshape2

我在一天中有道琼斯工业平均指数股票的价格数据。以下是数据样本:

> head(df)
                        TS  Sym      Ask
1: 2015-03-24 14:00:00.000 YMM5 17956.00
2: 2015-03-24 14:00:00.002 AAPL   126.91
3: 2015-03-24 14:00:00.005  UNH   118.35
4: 2015-03-24 14:00:00.009  XOM    84.64
5: 2015-03-24 14:00:00.014  AXP    81.35
6: 2015-03-24 14:00:00.016   PG    84.19

我正在尝试使用reshape2的dcast()函数将数据转换为宽格式,因此它看起来像:

                        TS   AAPL   AXP    PG    UNH   XOM
1: 2015-03-24 14:00:00.000 126.91 81.35 84.19 118.35 84.64

当我尝试以下命令集时,我得到的是:

tick <- data.table(read.csv("2015-3-24.csv"))
df<- data.table(TS = tick$DateTime, Sym = tick$Symbol, Ask = tick$Ask, Bid = tick$Bid)
tmp <- dcast(data = df, formula = TS ~ Sym)

head(tmp)


                       TS AAPL AXP BA CAT CSCO CVX DD DIS GE GS HD IBM INTC JNJ JPM KO MCD MMM MRK MSFT NKE PFE PG TRV UNH UTX V VZ WMT XOM YMM5
1 2015-03-24 14:00:00.000    0   0  0   0    0   0  0   0  0  0  0   0    0   0   0  0   0   0   0    0   0   0  0   0   0   0 0  0   0   0    1
2 2015-03-24 14:00:00.002    1   0  0   0    0   0  0   0  0  0  0   0    0   0   0  0   0   0   0    0   0   0  0   0   0   0 0  0   0   0    0
3 2015-03-24 14:00:00.005    0   0  0   0    0   0  0   0  0  0  0   0    0   0   0  0   0   0   0    0   0   0  0   0   1   0 0  0   0   0    0

我知道我的公式错了或者什么,但无论我有什么,但尝试我得到相同的结果。提前谢谢。

1 个答案:

答案 0 :(得分:0)

你的帖子有几个问题,我想澄清一下:(评论时间太长,所以现在这个猜测最好。)

  • 没有可复制的例子。
  • 您使用data.table,但未显示该版本。 data.table提供了meltdcast的有效实施。在版本&lt; = 1.9.4中,您可能希望使用dcast.data.table。从版本1.9.5+,您可以直接使用dcast()而无需加载reshape2。因此,我不确定您是使用dcast中的reshape2还是data.table的开发版本。
  • 您的公式(如果不是拼写错误)对您显示的结果有误。

我相信你没有显示dcast的整个结果。如果它抱怨某些事情

  

缺少聚合函数,默认为'length'

那么你在公式中的id和度量变量不能唯一地标识单元格。提供最少的信息,我只能猜测这确实是你的问题。