我使用read.csv()
命令读取了一个CSV文件,我想用chartSeries()
转换为xts和图形。
通过执行以下操作变为矩阵:
MyData <- as.matrix(MyData)
当我使用
转换为xts时MyData_xts <- xts(MyData[,-1], order.by=as.POSIXct(MyData[,1]))
我收到以下错误消息:
Error in as.POSIXlt.character(as.character(x), ...) :
character string is not in a standard unambiguous format
具有我的索引的列是yyyymm格式。我已经读到这可能是一个问题,但我无法找到解决方法。
编辑1
转换为矩阵之前的CSV读取如下所示。所有行都是因子类:
X |Mkt.RF|SMB
------|------|---
196307|-0.39 |-.046
196308|5.07 |-0.81
196308|-1.57 |-.048
答案 0 :(得分:3)
您应该使用read.zoo
将CSV直接导入到zoo对象中。如果需要,可以使用as.xts
将zoo对象转换为xts。您还应该使用yearmon
索引,因为您的索引只有几年和几个月。
Text <- "X,Mkt.RF,SMB
196307,-0.39,-0.046
196308, 5.07,-0.810
196309,-1.57,-0.048"
# function adapted from examples in ?read.zoo
z <- read.zoo(text=Text, header=TRUE, sep=",",
FUN=function(x) as.yearmon(format(x), "%Y%m"))
z
# Mkt.RF SMB
# Jul 1963 -0.39 -0.046
# Aug 1963 5.07 -0.810
# Sep 1963 -1.57 -0.048
答案 1 :(得分:0)
由于您未提供任何数据,我将使用与您的描述匹配的小型测试示例。我认为as.POSIXct
无法在没有特定日期的情况下发挥作用。您可以使用每月的第一天来完成这项工作。
x = c("201701", "201702", "201703")
xt = as.POSIXct(paste(x, "01", sep=""), format="%Y%m%d")
xts(xt, order.by=xt)
[,1]
2017-01-01 1483246800
2017-02-01 1485925200
2017-03-01 1488344400
<强>更新强>
我看到你现在已经提供了数据并说你正在获得NAs。我正在使用您提供的数据,将其作为csv读取,使用我的代码处理它而不是获取NA。请再次查看此版本的代码。
Input = read.csv(text="X,Mkt.RF,SMB
196307,-0.39 ,-.046
196308,5.07 ,-0.81
196308,-1.57 ,-.048",
header=TRUE, stringsAsFactors=FALSE)
library(xts)
Input$xt = as.POSIXct(paste(Input$X, "01", sep=""), format="%Y%m%d")
xts(Input, order.by=Input$xt)
X Mkt.RF SMB xt
1963-07-01 "196307" "-0.39" "-0.046" "1963-07-01"
1963-08-01 "196308" " 5.07" "-0.810" "1963-08-01"
1963-08-01 "196308" "-1.57" "-0.048" "1963-08-01"