尝试为我的数据构建一个xts。从它的日期还可以,但是我不知道如何将“时间”列转换为时间格式。时间以数字形式存储,数据如下:
date time price
1 19900102 930 353.40
2 19900102 931 353.25
3 19900102 932 353.02
4 19900102 933 352.97
5 19900102 934 352.81
6 19900102 935 352.74
我尝试了以下代码,但是它不起作用。
sp500.xts <- as.xts(sp500[,3],order.by=as.POSIXct(strptime(paste(as.character(sp500[,1]),as.character(sp500[,2])),"%Y%m%d %H:%M")))
感谢所有提供帮助的人。
答案 0 :(得分:1)
假设930 = 09:30
,可以尝试以下操作:
timec
用于填充以获取完整的hm; dtc
用于获取完整的日期时间,然后使用ymd_hm
读取为日期时间格式。
library(tidyverse)
library(lubridate)
test %>%
mutate(timec = str_pad(time, 4, side = 'left', pad = '0'),
dtc = str_c(date, timec),
dt = ymd_hm(dtc))
> test %>%
+ mutate(timec = str_pad(time, 4, side = 'left', pad = '0'),
+ dtc = str_c(date, timec),
+ dt = ymd_hm(dtc))
date time price timec dtc dt
1 19900102 930 353.40 0930 199001020930 1990-01-02 09:30:00
2 19900102 931 353.25 0931 199001020931 1990-01-02 09:31:00
3 19900102 932 353.02 0932 199001020932 1990-01-02 09:32:00
4 19900102 933 352.97 0933 199001020933 1990-01-02 09:33:00
5 19900102 934 352.81 0934 199001020934 1990-01-02 09:34:00
6 19900102 935 352.74 0935 199001020935 1990-01-02 09:35:00
答案 1 :(得分:0)
parse_date_time
和lubridate
软件包中timetk
的忠实拥护者:
library(tidyverse)
library(lubridate)
library(timetk)
test %>%
mutate(date = parse_date_time(paste(date, str_pad(time, 4, side = "left", pad = "0")), "YmdHM")) %>%
select(-time) %>%
tk_xts(silent = T)
price
1990-01-02 09:30:00 353.40
1990-01-02 09:31:00 353.25
1990-01-02 09:32:00 353.02
1990-01-02 09:33:00 352.97
1990-01-02 09:34:00 352.81
1990-01-02 09:35:00 352.74