R-将许多1D格式的时间序列转换为3D数组,每个时间序列都带有两个标签

R-将许多1D格式的时间序列转换为3D数组,每个时间序列都带有两个标签,r,R,我有一个一维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,

我有一个一维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]

我想我能回答你的问题

创建数据帧

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))

我想我能回答你的问题

创建数据帧

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))
试试这个:

library(plyr)
daply(x, c("Date", "Stock Ticker", "Country"), function(y) y$Price)
daply
的第一个参数是数据帧,第二个是要用作维度的变量(可能需要将空格更改为点,具体取决于读取数据的方式),第三个是从daraframe行计算数组值的函数。

尝试以下操作:

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

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

假设@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

假设@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
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