csv数据转换为xts

时间:2017-07-25 07:45:03

标签: r csv xts

我有一个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。

2 个答案:

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