0

我正在尝试从 quantmod 创建的数据框 SPY 中提取 SPY.Close 列。但是,我想对此进行概括,以便我最初传递的任何符号都可以用于创建关闭向量。

library(quantmod)
library(wmtsa)
library(ggplot2)
library(tseries)
library(pracma)
s <- getSymbols("SPY")
s <- as.name(s)
field <- c(paste(s,".Close",sep=""))
close <- as.vector(s[,field])

如果我只是输入

close <- as.vector(SPY[,"SPY.Close"])

这是成功的。然而,它们是常数,需要随着每个新符号进行更改。

任何帮助,将不胜感激。

4

3 回答 3

1

当您想使用其字符值从工作环境中提取命名对象时,请尝试get

s <- getSymbols("SPY")
field <- c(paste(s,".Close",sep=""))
close <- get(s)[, field]


str(get(s)[, field])
An ‘xts’ object on 2007-01-03/2015-01-27 containing:
  Data: num [1:2031, 1] 141 142 141 141 141 ...
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr "SPY.Close"
  Indexed by objects of class: [Date] TZ: UTC
  xts Attributes:  
List of 2
 $ src    : chr "yahoo"
 $ updated: POSIXct[1:1], format: "2015-01-28 10:06:17"

as.name不需要,并且可能混淆了手头的问题。 -s对象已经是可以使用的形式。)

于 2015-01-28T18:10:53.017 回答
1

我相当确定这XXX.Close将始终是返回的对象中的第四列getSymbols,因此如果您的对象是X,那么X[,4]将为您提供所需的列。当然,单列对象仍然会有 和 类xtszoo这将使绘图等更方便。如果你真的想要一个numeric接近值的向量,你可以使用X[[4]]删除xtszoo类。在下面的示例中,我创建了一个新环境qm_env来存储对象,这样它们就不会弄乱我的.GlobalEnv- 你可以忽略with(qm_env, ...)我的表达部分并专注于...

library(quantmod)
##
qm_env <- new.env()
tickers <- c("SPY","MSFT","MMM")
##
sapply(tickers, function(x){
  getSymbols(x,env=qm_env)
})
##
with(qm_env,close <- MMM[,4])
R> with(qm_env, head( close ))
           MMM.Close
2007-01-03     78.26
2007-01-04     77.95
2007-01-05     77.42
2007-01-08     77.59
2007-01-09     77.68
2007-01-10     77.85

如果由于某种原因您不确定第四列将始终是关闭值,只需创建一个这样的函数

getClose <- function(x) {
  x[,agrep("Close",names(x))]
}

应该做的工作:

R> with(qm_env, head( getClose(MSFT) ))
           MSFT.Close
2007-01-03      29.86
2007-01-04      29.81
2007-01-05      29.64
2007-01-08      29.93
2007-01-09      29.96
2007-01-10      29.66
R> with(qm_env, head( getClose(SPY) ))
           SPY.Close
2007-01-03    141.37
2007-01-04    141.67
2007-01-05    140.54
2007-01-08    141.19
2007-01-09    141.07
2007-01-10    141.54
于 2015-01-28T18:12:48.227 回答
1

您可以使用quantmod::getPrice,默认情况下查找"*.Close"列。

require(quantmod)
x <- getSymbols("SPY", auto.assign=FALSE)
head(getPrice(x))
#            SPY.Close
# 2007-01-03    141.37
# 2007-01-04    141.67
# 2007-01-05    140.54
# 2007-01-08    141.19
# 2007-01-09    141.07
# 2007-01-10    141.54
于 2015-01-28T18:24:47.930 回答