【问题标题】:R - Turn many time series in 1D format into 3D array, with each time series tagged with two labelsR - 将许多 1D 格式的时间序列转换为 3D 数组,每个时间序列都标记有两个标签
【发布时间】:2012-07-18 16:22:17
【问题描述】:

我有一个包含许多时间序列数据的一维 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]

【问题讨论】:

    标签: r


    【解决方案1】:

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

    【讨论】:

      【解决方案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))
      

      创建所有可能选项的集合

      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
      

      【讨论】:

        【解决方案3】:

        试试这个:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-06-23
          • 2021-02-13
          • 1970-01-01
          • 1970-01-01
          • 2014-09-13
          • 2014-09-02
          • 1970-01-01
          相关资源
          最近更新 更多