【问题标题】:Data Manipulation in R, Stock Data TransformationR中的数据操作,库存数据转换
【发布时间】:2014-10-21 10:38:36
【问题描述】:

我想从交换数据的经典“时间 * OHLC”数据格式创建以下 data.frame。

起点是以下数据框:

      Date   Time    Open    High     Low   Close
01/28/2002   0833  543.81  543.82  543.84  543.85
01/28/2002   0850  542.95  542.95  542.95  542.95
01/28/2002   0901  542.45  542.45  542.45  542.45
01/28/2002   0911  542.45  542.45  542.45  542.45

我的表中有 1534129 行。我对将数据移动到以下结构有点绝望:

      Date  Time   Price
01/28/2002  0833  543.81
01/28/2002  0833  543.82
01/28/2002  0833  543.84
01/28/2002  0833  543.85
01/28/2002  0850  542.95

这就是应该如何重写第一行并且应该在原始文件的每一行上重复此扩展名的方式。我任务的第二部分是设置一个参数(分布),该参数将决定在柱创建阶段是高还是低。这当然对以后的数据操作有进一步的影响,但我还不能进入起点。

稍后,我想处理代码并决定当您选择始终高时数据的外观,然后首先创建低(相反),或者最难的事情,因为它不是确定性地完成的,是具有分布的版本将决定哪个先行。

希望它准确地描述了任务(问题)。我为每一个提示或想法感到高兴。谢谢你的帮助。

【问题讨论】:

    标签: r stockquotes


    【解决方案1】:

    试试

     library(tidyr)
     library(dplyr)
     df1 <- df %>%
                 gather(Var, Price, Open:Close) %>%
                 arrange(Date, Time) %>%
                 select(-Var)
    
    
     head(df1)
     #        Date Time  Price
     #1 01/28/2002  0833 543.81
     #2 01/28/2002  0833 543.82
     #3 01/28/2002  0833 543.84
     #4 01/28/2002  0833 543.85
     #5 01/28/2002  0850 542.95
     #6 01/28/2002  0850 542.95
    

    数据

     df <-structure(list(Date = c("01/28/2002", "01/28/2002", "01/28/2002", 
     "01/28/2002"), Time = c("0833", "0850", "0901", "0911"), Open = c(543.81, 
     542.95, 542.45, 542.45), High = c(543.82, 542.95, 542.45, 542.45
     ), Low = c(543.84, 542.95, 542.45, 542.45), Close = c(543.85, 
     542.95, 542.45, 542.45)), .Names = c("Date", "Time", "Open", 
    "High", "Low", "Close"), row.names = c(NA, -4L), class = "data.frame")
    

    【讨论】:

      【解决方案2】:

      使用“data.table”,您可以获得长格式的数据:

      library(data.table)
      as.data.table(df)[, list(Price = unlist(.SD)), by = list(Date, Time)]
      #           Date Time  Price
      #  1: 01/28/2002 0833 543.81
      #  2: 01/28/2002 0833 543.82
      #  3: 01/28/2002 0833 543.84
      #  4: 01/28/2002 0833 543.85
      #  5: 01/28/2002 0850 542.95
      #  6: 01/28/2002 0850 542.95
      #  7: 01/28/2002 0850 542.95
      #  8: 01/28/2002 0850 542.95
      #  9: 01/28/2002 0901 542.45
      # 10: 01/28/2002 0901 542.45
      # 11: 01/28/2002 0901 542.45
      # 12: 01/28/2002 0901 542.45
      # 13: 01/28/2002 0911 542.45
      # 14: 01/28/2002 0911 542.45
      # 15: 01/28/2002 0911 542.45
      # 16: 01/28/2002 0911 542.45
      

      或者,您也可以查看melt,这对我来说似乎更安全,因为您不会丢失任何信息(您的列名)。

      【讨论】:

      • 谢谢你,我也会经历融化。
      猜你喜欢
      • 2021-07-25
      • 2011-02-25
      • 1970-01-01
      • 1970-01-01
      • 2014-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多