【问题标题】:split xts object by index (date)按索引(日期)拆分 xts 对象
【发布时间】:2011-08-25 17:08:36
【问题描述】:

我有一个包含日内数据的 xts 对象:

head(stocks[,1])
                    SMH.close
2009-01-02 09:31:00     17.66
2009-01-02 09:32:00     17.66
2009-01-02 09:33:00     17.64
2009-01-02 09:34:00     17.60
2009-01-02 09:35:00     17.58
2009-01-02 09:36:00     17.63

我想对日内数据执行各种分析,但操作不应跨越日间界限。所以我想做的是按日期拆分数据(忽略时间)。因此,我通过以下方式提取了索引并保存了唯一的日期值:

y <- index(stocks)
x <- strptime(y, format="%Y-%m-%d")
uniquedates <- unique(x)

现在我想做一些类似于 ?split 中的示例的事情

> g <- airquality$Month
> l <- split(airquality, g)

这里的空气质量数据按月份列的值拆分为一个列表对象。我不确定如何做类似的事情,因为日期在我的情况下是索引而不是数据列。我试过但得到一个错误。

> split(stocks, uniquedates)
Error in args[[i]] : subscript out of bounds

也许有一种更简洁的方法可以实现我想做的事情。非常感谢您的帮助。

【问题讨论】:

    标签: r object date split xts


    【解决方案1】:

    您应该跳过 unique() 步骤。只需使用带有 f="days" 参数的 split.xts。

    data(sample_matrix)
    sample.xts <- as.xts(sample_matrix, descr='my new xts object')
    split.xts(sample.xts, f="days")
    [[1]]
                   Open     High      Low    Close
    2007-01-02 50.03978 50.11778 49.95041 50.11778
    
    [[2]]
                  Open     High     Low    Close
    2007-01-03 50.2305 50.42188 50.2305 50.39767
    
    [[3]]
                   Open     High      Low    Close
    2007-01-04 50.42096 50.42096 50.26414 50.33236
    
    [[4]]
    snipped
    

    【讨论】:

    • +1 但split 是通用的,因此您无需显式调用split.xtssplit(sample.xts, "days") 工作。
    • 是的。我知道这一点,但 split.xts 的参数与 split.default 的参数不同,所以我决定强调这种差异。
    • 这正是我所需要的。非常感谢!
    • 另外,请注意split() 返回zoo 对象,而split.xts 返回xts/zoo 对象。
    【解决方案2】:

    也许您正在寻找apply.daily(或一般的period.apply)?

    【讨论】:

    • period.apply 函数肯定会派上用场,但我也想计算各种统计数据——一些滚动和其他基于概率的统计数据——在每个时间增量 X 盘中。例如,我想知道在时间 = X * n(其中 n 是整数)时有多少股票上涨/下跌。因此,我认为我需要按天拆分数据,但也许有一种更简洁的方法来准备数据。
    • 如果您提供了一个更完整的示例来说明您正在尝试做的事情,我们可以建议最佳替代方案。
    猜你喜欢
    • 2020-12-04
    • 2015-09-28
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    • 2014-07-25
    • 2017-12-08
    相关资源
    最近更新 更多