Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将因子类上的yyyymm转换为要与ChartSeries()一起使用的字符类_R_Csv_Xts_Quantmod - Fatal编程技术网

将因子类上的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次观测的周期性