我有一个csv文件,其中包含2016年纳斯达克100的1分钟数据。我想将其转换为xts以与quantstrat一起使用。导入后,它看起来像这样:
date open high low close volume adjusted
<chr> <dbl> <dbl> <dbl> <dbl> <int> <int>
1 04.01.2016 14:30 48963818 48964272 48952363 48958789 0 0
2 04.01.2016 14:31 48923579 48940259 4891752 48940259 0 0
3 04.01.2016 14:32 48941753 48992466 48941753 48988589 0 0
4 04.01.2016 14:33 48992227 48992227 48948281 48965469 0 0
5 04.01.2016 14:34 48962915 4896418 48923838 48934326 0 0
6 04.01.2016 14:35 48931196 48963301 48931196 48954341 0 0
我使用代码
NASD_xts = xts(NASD, order.by=as.POSIXct(NASD$date, format="%d-%m-%y %H:%M"))
并得到这个结果。
date open high low close volume adjusted
<NA> "04.01.2016 14:30" "48963818" "48964272" "48952363" "48958789" " 0" "0"
<NA> "04.01.2016 14:31" "48923579" "48940259" " 4891752" "48940259" " 0" "0"
<NA> "04.01.2016 14:32" "48941753" "48992466" "48941753" "48988589" " 0" "0"
<NA> "04.01.2016 14:33" "48992227" "48992227" "48948281" "48965469" " 0" "0"
<NA> "04.01.2016 14:34" "48962915" " 4896418" "48923838" "48934326" " 0" "0"
<NA> "04.01.2016 14:35" "48931196" "48963301" "48931196" "48954341" " 0" "0"
我的问题是第一行中的NA
值,应该有时间。所以我没有得到正确的xts来处理quantstrat。
答案 0 :(得分:1)
您对format
的{{1}}参数不正确。并且您不应在xts对象中包含as.POSIXct
列,因为日期时间已包含在index属性中,而xts对象只能包含一个类型(因为它们是下面的矩阵)。
包含date
列是导致xts对象中其余列成为字符的原因。由于xts对象只能包含一个类型,因此data.frame的所有列都被强制转换为公共类型(在本例中为字符)。
你的命令应该是:
date
请注意,该格式假定NASD_xts <- xts(NASD[,-1],
order.by = as.POSIXct(NASD$date, format = "%d.%m.%Y %H:%M"))
列指定为月,日,年。您提供的示例数据中的月份和日期不明确。所以真正的格式可以是日,月,年(意思是日期可以是1月4日,也可以是4月1日)。
答案 1 :(得分:0)
将xts
应用于“日期”列以外的列,将order.by
应用于“日期”
library(xts)
library(lubridate)
xts(NASD[-1], order.by = mdy_hm(NASD$date))
# open high low close volume adjusted
#2016-04-01 14:30:00 48963818 48964272 48952363 48958789 0 0
#2016-04-01 14:31:00 48923579 48940259 4891752 48940259 0 0
#2016-04-01 14:32:00 48941753 48992466 48941753 48988589 0 0
#2016-04-01 14:33:00 48992227 48992227 48948281 48965469 0 0
#2016-04-01 14:34:00 48962915 4896418 48923838 48934326 0 0
#2016-04-01 14:35:00 48931196 48963301 48931196 48954341 0 0
NASD <- structure(list(date = c("04.01.2016 14:30", "04.01.2016 14:31",
"04.01.2016 14:32", "04.01.2016 14:33", "04.01.2016 14:34", "04.01.2016 14:35"
), open = c(48963818L, 48923579L, 48941753L, 48992227L, 48962915L,
48931196L), high = c(48964272L, 48940259L, 48992466L, 48992227L,
4896418L, 48963301L), low = c(48952363L, 4891752L, 48941753L,
48948281L, 48923838L, 48931196L), close = c(48958789L, 48940259L,
48988589L, 48965469L, 48934326L, 48954341L), volume = c(0L, 0L,
0L, 0L, 0L, 0L), adjusted = c(0L, 0L, 0L, 0L, 0L, 0L)), .Names = c("date",
"open", "high", "low", "close", "volume", "adjusted"), row.names = c("1",
"2", "3", "4", "5", "6"), class = c("tbl_df", "tbl", "data.frame"
))