R语言处理含特殊字符的xts对象 雅虎金融数据获取问题问询
问题核心原因
R的变量名不允许包含=等特殊字符,getSymbols默认会将拉取到的CL=F数据直接赋值给名为CL=F的全局变量,这种非法命名的变量无法直接通过$符号调用,同时原有代码聚合步骤错误使用了微软股票MSFT的索引,也会导致结果异常。
解决方案
方案1(最推荐):关闭自动赋值,手动指定存储变量
调用getSymbols时添加auto.assign = FALSE参数,直接将返回的数据集赋值给自定义的合法变量名,完全规避非法变量名问题:
library(tidyquant) # 拉取原油数据,直接赋值给自定义变量crude_oil crude_oil <- getSymbols("CL=F", from = "2000-08-01", to = "2021-07-31", src = 'yahoo', periodicity = 'daily', auto.assign = FALSE) # 聚合月度平均收盘价,索引使用原油数据本身的索引 output <- aggregate(crude_oil$`CL=F.Close`, list(format(index(crude_oil), "%Y-%m")), mean) colnames(output) <- c('ClosingPrice') # 生成时间序列 price = ts(output$ClosingPrice, frequency=12, start=c(2000,08)) summary(price)
方案2:用反引号包裹非法变量名调用
如果不想修改getSymbols的默认赋值逻辑,可以用反引号` 包裹含特殊字符的变量名和列名,直接调用:
library(tidyquant) getSymbols("CL=F", from = "2000-08-01", to = "2021-07-31", src = 'yahoo', periodicity = 'daily') # 用反引号包裹非法变量名和列名 output <- aggregate(`CL=F`$`CL=F.Close`, list(format(index(`CL=F`), "%Y-%m")), mean)
内容的提问来源于stack exchange,提问作者natalieee
相关产品推荐
相关产品推荐

