我已将 xts 对象存储在环境中。当这些对象存储在环境中时,我可以对它们进行子集化,即“就地”对它们进行操作吗?我可以通过引用这些对象来提取它们吗colname?
下面是我要表达的内容的示例。
# environment in which to store data
data <- new.env()
# Set data tickers of interest
tickers <- c("FEDFUNDS", "GDPPOT", "DGS10")
# import data from FRED database
library("quantmod")
dta <- getSymbols( tickers
, src = "FRED"
, env = data
, adjust = TRUE
)
但是,这会下载整个数据集。现在,我想丢弃一些数据,保存它,使用它(例如绘制它)。我想将数据保留在这个日期范围内:
# set dates of interest
date.start <- "2012-01-01"
date.end <- "2012-12-31"
我有两个不同的目标。
- 对环境内的所有数据进行子集化(
就地行动或创造一个新的环境并覆盖
老环境用它)。
- 只选取我选择的一些股票并对它们进行子集化,
说 FEDFUNDS 和 DGS10,然后将它们保存在新的
环境。我还想保留这些对象的 xts-ness,这样我就可以方便地将它们绘制在一起或单独绘制。
以下是我确实设法做到的一些事情:
# extract and subset a single xts object
dtx1 <- data$FEDFUNDS
dtx1 <- dtx1[paste(date.start,date.end,sep="/")]
这种方法的缺点是我需要在 data$ 之后显式键入 FEDFUNDS。但我想根据预先指定的代码列表进行工作,例如
tickers2 <- c("FEDFUNDS", "DGS10")
通过结合功能,我离系统化又近了一步get与功能lapply
# extract xts objects as a list
dtxl <- lapply(tickers, get, envir = data)
但这会返回一个列表。我不确定如何方便地使用此列表来对数据进行子集化、绘制数据等。我如何引用 DGS10 或tickers2 中的一对股票?
我非常想写一些类似的东西数据$代码[1] or 数据$股票代码[[1]]但这没有用。我也尝试过Paste0('数据','$',股票[1])及其带或不带引号的变体。无论如何,我相信环境中数据的顺序不是系统的,所以我真的更喜欢使用股票代码的名称而不是它的索引,比如数据$tickers[colnames = FEDFUNDS]本段中的所有尝试都没有成功。
如果我的问题不清楚,我深表歉意,但请要求澄清。感谢您的关注!
编辑:子集化
我收到了一些很棒的建议。GSee的答案有几个非常有用的技巧。以下是如何将 xts 对象子集化到感兴趣的日期间隔内:
dates <- paste(date.start, date.end, sep="/")
as.environment(eapply(data, "[", dates))