将因子类上的yyyymm转换为要与ChartSeries()一起使用的字符类
我使用将因子类上的yyyymm转换为要与ChartSeries()一起使用的字符类,r,csv,xts,quantmod,R,Csv,Xts,Quantmod,我使用read.CSV()命令读取了一个CSV文件,我想用chartSeries()将其转换为xts和图形 我通过以下操作将其转换为矩阵: MyData <- as.matrix(MyData) 包含我的索引的列采用yyyymm格式。我读到这可能是一个问题,但我还没有找到解决办法 编辑1 转换为矩阵之前读取的CSV如下所示。所有行都是“系数”类: X |Mkt.RF|SMB ------|------|--- 196307|-0.39 |-.046 196308|5.07
read.CSV()
命令读取了一个CSV文件,我想用chartSeries()
将其转换为xts和图形
我通过以下操作将其转换为矩阵:
MyData <- as.matrix(MyData)
包含我的索引的列采用yyyymm格式。我读到这可能是一个问题,但我还没有找到解决办法
编辑1
转换为矩阵之前读取的CSV如下所示。所有行都是“系数”类:
X |Mkt.RF|SMB
------|------|---
196307|-0.39 |-.046
196308|5.07 |-0.81
196308|-1.57 |-.048
因为您没有提供任何数据,所以我将使用一个与您的描述相匹配的小测试示例。我认为没有特定的日期,
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读取,使用我的代码进行处理,而不获取NAs。请再次查看此版本的代码
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"
因为您没有提供任何数据,所以我将使用一个与您的描述相匹配的小测试示例。我认为没有特定的日期,
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读取,使用我的代码进行处理,而不获取NAs。请再次查看此版本的代码
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"
您应该使用
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
Text您应该使用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
Text bethanyP,当转换为矩阵时,所有字段的类将从因子转换为字符。G5W,当转换为xts时,在数据库中创建NA。我知道它们以前不存在,因为在转换到xts之前,我使用omit.na()删除所有带有NAs的行。但在转换为xts并运行chartSeries()后,我得到以下错误:na.omit.xts(x)中的错误:不支持的类型请提供CSV文件的示例。@Yago I更新了我的答案,以使用您的数据并响应您的注释。在转换为矩阵时,所有字段的类都从factor转换为character.G5W,转换为xts时,会在数据库中创建NA。我知道它们以前不存在,因为在转换到xts之前,我使用omit.na()删除所有带有NAs的行。但在转换为xts并运行chartSeries()后,我遇到以下错误:na.omit.xts(x)中的错误:不支持的类型请提供您的CSV文件的示例。@Yago我更新了我的答案以使用您的数据并回复您的评论我是R的新手。我不完全理解您提供的代码,特别是为什么在as.yearmon()中使用x/100。我收到以下错误消息:x/100中的错误:二进制的非数字参数operator@Yago:那部分没有必要,我已经从我的答案中删去了。您可能会遇到该错误,因为CSV中的某些行无法将第一列解释为数字。如果这是真的,您需要仔细查看CSV中的数据,以确定如何处理这些行。Joshua,您是对的。我在原始CSV文件中的一行中遇到数据问题。代码现在可以工作了。感谢您的帮助我是R的新手。我不完全理解您提供的代码,特别是为什么在as.yearmon()中使用x/100。我收到以下错误消息:x/100中的错误:二进制的非数字参数operator@Yago:那部分没有必要,我已经从我的答案中删去了。您可能会遇到该错误,因为CSV中的某些行无法将第一列解释为数字。如果这是真的,您需要仔细查看CSV中的数据,以确定如何处理这些行。Joshua,您是对的。我在原始CSV文件中的一行中遇到数据问题。代码现在可以工作了。谢谢你的帮助谢谢你的回复。我查看了您提交的代码,但在运行xts()后仍然获得NAs。我可以生成索引ok,但在运行xts()和Periodicy()时,我会收到以下错误消息:无法计算1观测的周期G5W感谢您的回复。我查看了您提交的代码,但在运行xts()后仍然获得NAs。我可以生成索引ok,但在运行xts()和Periodicy()时,我会得到以下错误消息:无法计算1次观测的周期性