gpt4 book ai didi

r - 从环境中获取 xts 对象

转载 作者:行者123 更新时间:2023-12-01 01:09:48 25 4
gpt4 key购买 nike

我在环境中存储了 xts 对象。我可以在这些对象存储在环境中时对其进行子集化,即“就地”对它们进行操作吗?我可以通过引用它们的列名来提取这些对象吗?

下面是我所了解的示例。

# 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 中的一对股票代码?

    我非常想写一些类似 的东西数据$tickers[1] 数据$tickers[[1]] 但这没有用。我也试过 paste0('data','$',tickers[1]) 以及带或不带引号的变体。无论如何,我相信环境中数据的顺序是不系统的,所以我真的更喜欢使用股票代码的名称而不是它的索引,比如 数据$tickers[colnames = FEDFUNDS] 本段中的所有尝试都没有奏效。

    如果我的问题不清楚,我很抱歉,但请要求澄清。并感谢您的关注!

    编辑:子集

    我收到了一些很棒的建议。 G见的答案有几个非常有用的技巧。以下是将 xts 对象子集化到感兴趣的日期间隔内的方法:
    dates <- paste(date.start, date.end, sep="/")
    as.environment(eapply(data, "[", dates))

    最佳答案

    这将对环境中的每个对象进行子集化,并返回具有子集化数据的环境:

    data2 <- as.environment(eapply(data, "[", paste(date.start, date.end, sep="/")))

    对于第二个问题,您基本上可以做同样的事情。只需将列表的组件命名为 lapplysetNames 包裹它返回,然后强制到一个环境:
    data3 <- as.environment(setNames(lapply(tickers, get, envir = data), tickers))

    或者,更好的是,使用 mget这样您就不必使用 lapplysetNames
    data3 <- as.environment(mget(tickers, envir = data))

    或者,我实际上在 qmao 中有几个方便的功能专为此设计: gaa 代表“获取、申请、分配”和 gsa 代表“获取、子集、分配”。

    获取某些代码的数据,对数据进行子集化,然后分配到环境中
    gsa(tickers, subset=paste(date.start, date.end, sep="/"), env=data, 
    store.to=globalenv())
    gaa允许您在保存在相同或不同环境中之前将任何函数应用于每个对象。

    关于r - 从环境中获取 xts 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15980985/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com