簡體   English   中英

使用午夜列中的日期和秒數將 data.frame 轉換為 xts object (R)

[英]Using date and seconds from midnight columns to convert a data.frame to an xts object (R)

假設我有如下數據:

        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 object:

                       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

我們可以將 'DATE', 'TIME' 列轉換為日期時間 class 並通過指定order.by將數據集轉換為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的索引需要日期時間 class object 而不是格式化字符 class 向量

數據

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

我不是xts專家,但我認為第一步是將這兩列轉換為POSIXt object。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM