【问题标题】:Using date and seconds from midnight columns to convert a data.frame to an xts object (R)使用午夜列中的日期和秒数将 data.frame 转换为 xts 对象 (R)
【发布时间】:2020-09-14 21:28:28
【问题描述】:

假设我有如下数据:

        DATE  TIME   Col1   Col2
1 1993-01-04 34538 10.250 10.000
2 1994-01-05 34541 10.250 10.111
3 1997-03-16 34546 10.250 10.222
4 2017-11-10 34561 10.251 10.333
5 2001-08-28 34565 10.251 10.444
6 2006-04-20 34807 10.251 10.555

“TIME”列的格式为从午夜开始的秒数。我如何组合“日期”和“时间”列来获得一个看起来像这样的 xts 对象:

                       Col1   Col2
X1993.01.04.09.35.38 10.250 10.000
X1994.01.05.09.35.41 10.250 10.111
X1997.03.16.09.35.46 10.250 10.222
X2017.11.10.09.36.01 10.251 10.333
X2001.08.28.09.36.05 10.251 10.444
X2006.04.20.09.40.07 10.251 10.555

【问题讨论】:

    标签: r xts


    【解决方案1】:

    我们可以通过指定order.by将'DATE'、'TIME'列转换为Datetime类并将数据集转换为xts

    library(xts)     
    library(lubridate)
    xts(df1[-(1:2)], order.by = as.POSIXct(paste(df1$DATE, 
                 hms::hms(seconds_to_period(df1$TIME)))))
    #                      Col1   Col2
    #1993-01-04 09:35:38 10.250 10.000
    #1994-01-05 09:35:41 10.250 10.111
    #1997-03-16 09:35:46 10.250 10.222
    #2001-08-28 09:36:05 10.251 10.444
    #2006-04-20 09:40:07 10.251 10.555
    #2017-11-10 09:36:01 10.251 10.333
    

    注意:xts 的索引需要一个 Datetime 类对象,而不是一个格式化的字符类向量

    数据

    df1 <- structure(list(DATE = c("1993-01-04", "1994-01-05", "1997-03-16", 
    "2017-11-10", "2001-08-28", "2006-04-20"), TIME = c(34538L, 34541L, 
    34546L, 34561L, 34565L, 34807L), Col1 = c(10.25, 10.25, 10.25, 
    10.251, 10.251, 10.251), Col2 = c(10, 10.111, 10.222, 10.333, 
    10.444, 10.555)), class = "data.frame", row.names = c("1", "2", 
    "3", "4", "5", "6"))
    

    【讨论】:

      【解决方案2】:

      我不是xts 官员,但我认为第一步是将这两列转换为POSIXt 对象。

      as.POSIXct(dat$DATE, tz = "UTC", format = "%Y-%m-%d") + dat$TIME
      # [1] "1993-01-04 09:35:38 UTC" "1994-01-05 09:35:41 UTC"
      # [3] "1997-03-16 09:35:46 UTC" "2017-11-10 09:36:01 UTC"
      # [5] "2001-08-28 09:36:05 UTC" "2006-04-20 09:40:07 UTC"
      

      (顺便说一句:假设 "%H.%M.%S" 格式,我认为您没有 36 分 61 秒 ...)

      【讨论】:

      • 是的,谢谢。这些不是我正在使用的实际数据,而只是问题的数字占位符。我删除了没有意义的条目。
      猜你喜欢
      • 2014-05-17
      • 2021-11-12
      • 1970-01-01
      • 2018-07-10
      • 1970-01-01
      • 2011-03-31
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      相关资源
      最近更新 更多