2

我有一个包含许多时间序列数据的一维 csv,每个时间序列都标有两个标签。

将文件读入 R 后,我应该使用哪些关键函数将数据快速转换为 3D 矩阵?

数据格式如下:

Date, Price, Stock Ticker, Country
1/1/2012, 98, ABC.US, US
1/2/2012, 100, ABC.US, US
.
.
.
1/1/2012, 36, XYZ.US, US
1/2/2012, 34, XYZ.US, US
.
.
.
.
1/1/2012, 78, MNO.LN, UK
1/2/2012, 75, MNO.LN, UK
.
.

我想将此表转换为具有日期、股票代码和国家/地区维度的 3D 数组:

3DTable[Date,Ticker,Country]
4

3 回答 3

3

假设@sebastian-c 正确解释了您的问题,这是基本 R 中的一条线,可以让您到达那里:

tapply(x$Price, x[, -2], c)
# , , Country = UK
# 
#           Stock.Ticker
# Date       ABC.US MNO.LN XYZ.US
#   1/1/2012     NA     78     NA
#   1/2/2012     NA     75     NA
# 
# , , Country = US
# 
#           Stock.Ticker
# Date       ABC.US MNO.LN XYZ.US
#   1/1/2012     98     NA     36
#   1/2/2012    100     NA     34
于 2012-07-18T08:22:17.267 回答
1

我想我有你想要的答案。

创建数据框

x <- data.frame(Date=rep(c("1/1/2012", "1/2/2012"), 3), 
  Price=c(98, 100, 36, 34, 78, 75),
  "Stock Ticker"=rep(c("ABC.US", "XYZ.US", "MNO.LN"), each=2), 
  Country=rep(c("US", "US", "UK"), each=2))

创建所有可能选项的集合

all.opts <- expand.grid(Date=levels(x$Date), 
  Stock.Ticker=levels(x$Stock.Ticker), 
  Country=levels(x$Country))

将它与数据连接起来(base R 中可能有一种方法,但我不知道)

library(plyr)
x2 <- join(all.opts, x)

制作数组

x.arr2 <- array(x2$Price, dim=c(2, 3, 2), 
  dimnames=list(levels(x2$Date), levels(x2$Stock.Ticker), levels(x2$Country)))

欣赏手工:

x.arr2

#, , UK
#
#         ABC.US MNO.LN XYZ.US
#1/1/2012     NA     78     NA
#1/2/2012     NA     75     NA
#
#, , US
#
#         ABC.US MNO.LN XYZ.US
#1/1/2012     98     NA     36
#1/2/2012    100     NA     34
于 2012-07-18T06:56:49.700 回答
0

尝试这个:

library(plyr)
daply(x, c("Date", "Stock Ticker", "Country"), function(y) y$Price)

第一个参数daply是您的数据框,第二个参数是您要用作维度的变量(也许您需要将空间更改为一个点,具体取决于您读取数据的方式),第三个是计算daraframe 行中的数组值。

于 2012-07-18T08:17:26.027 回答