Reshape2 dcast() 函数返回错误值
Reshape2 dcast() function returning wrong values
我有当天道琼斯工业平均指数股票的报价数据。这是数据示例:
> 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
我知道我弄错了公式之类的,但无论我尝试什么,我都会得到相同的结果。提前致谢。
关于您的 post 的几个问题,我想得到澄清:(评论时间太长,所以目前这充其量只是猜测。)
- 没有可重现的例子。
- 您使用
data.table
,但未显示版本。 data.table
提供了 melt
和 dcast
的高效实现。在版本 <= 1.9.4 中,您可能想要使用 dcast.data.table
。从版本 1.9.5+
开始,您可以直接使用 dcast()
而无需加载 reshape2
。所以我不确定您使用的是 reshape2
中的 dcast
还是 data.table
. 的开发版本
- 您的公式(如果不是拼写错误)对于您显示的结果是错误的。
我相信您没有显示 dcast
的全部结果。如果它抱怨
Aggregate function missing, defaulting to 'length'
那么你在公式中的 id 和 measure vars 没有唯一标识单元格。根据提供的最少信息,我只能猜测这确实是您的问题。
我有当天道琼斯工业平均指数股票的报价数据。这是数据示例:
> 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
我知道我弄错了公式之类的,但无论我尝试什么,我都会得到相同的结果。提前致谢。
关于您的 post 的几个问题,我想得到澄清:(评论时间太长,所以目前这充其量只是猜测。)
- 没有可重现的例子。
- 您使用
data.table
,但未显示版本。data.table
提供了melt
和dcast
的高效实现。在版本 <= 1.9.4 中,您可能想要使用dcast.data.table
。从版本1.9.5+
开始,您可以直接使用dcast()
而无需加载reshape2
。所以我不确定您使用的是reshape2
中的dcast
还是data.table
. 的开发版本
- 您的公式(如果不是拼写错误)对于您显示的结果是错误的。
我相信您没有显示 dcast
的全部结果。如果它抱怨
Aggregate function missing, defaulting to 'length'
那么你在公式中的 id 和 measure vars 没有唯一标识单元格。根据提供的最少信息,我只能猜测这确实是您的问题。