【问题标题】:Pull nth Day of Month in XTS in R在 R 中的 XTS 中提取每月的第 n 天
【发布时间】:2012-10-11 22:08:09
【问题描述】:

我的问题与这里提出的问题密切相关:Pull Return from first business day of the month from XTS object using R

我不想提取每个月的第一天,而是提取每个月的第 10 个数据点。我该怎么做?

【问题讨论】:

    标签: r subset xts


    【解决方案1】:

    使用您链接到的问题中的相同示例数据,您可以进行一些基本的子集设置。

    这是示例数据:

    library(xts)
    data(sample_matrix)
    x <- as.xts(sample_matrix)
    

    这是子集:

    x[format(index(x), "%d") == "10"]
    #                Open     High      Low    Close
    # 2007-01-10 49.91228 50.13053 49.91228 49.97246
    # 2007-02-10 50.68923 50.72696 50.60707 50.69562
    # 2007-03-10 49.79370 49.88984 49.70385 49.88698
    # 2007-04-10 49.55704 49.78776 49.55704 49.76984
    # 2007-05-10 48.83479 48.84549 48.38001 48.38001
    # 2007-06-10 47.74899 47.74899 47.28685 47.28685
    

    这是你要找的吗?


    使用%in% 会给您更多的灵活性。例如,如果您想要每个月的第十天、第十一天和第十二天,您可以改用x[format(index(x), "%d") %in% c("10", "11", "12")]


    更新

    如果您在更新中想要提取第十个数据点,只需使用如下匿名函数:

    do.call(rbind, lapply(split(x, "months"), function(x) x[10]))
    #                Open     High      Low    Close
    # 2007-01-11 49.88529 50.23910 49.88529 50.23910
    # 2007-02-10 50.68923 50.72696 50.60707 50.69562
    # 2007-03-10 49.79370 49.88984 49.70385 49.88698
    # 2007-04-10 49.55704 49.78776 49.55704 49.76984
    # 2007-05-10 48.83479 48.84549 48.38001 48.38001
    # 2007-06-10 47.74899 47.74899 47.28685 47.28685
    

    请注意,第一行是当月的第十一天,因为数据实际上是从 2007 年 1 月 2 日开始的。

    x[1, ]
    #                Open     High      Low    Close
    # 2007-01-02 50.03978 50.11778 49.95041 50.11778
    

    【讨论】:

    • 请注意,这不考虑工作日等,仅考虑第十天本身。
    • 我重新编辑了我的问题以引用第 10 个数据点。我使用每月的第十天的问题是,有几个月,那一天在我的时间序列中不存在。
    【解决方案2】:

    xts 为这些类型的子集提供了一些内置函数。

    > data(sample_matrix)
    > x <- as.xts(sample_matrix)
    > x[.indexmday(x) == 10]
                   Open     High      Low    Close
    2007-01-10 49.91228 50.13053 49.91228 49.97246
    2007-02-10 50.68923 50.72696 50.60707 50.69562
    2007-03-10 49.79370 49.88984 49.70385 49.88698
    2007-04-10 49.55704 49.78776 49.55704 49.76984
    2007-05-10 48.83479 48.84549 48.38001 48.38001
    2007-06-10 47.74899 47.74899 47.28685 47.28685
    

    请参阅帮助页面 ?indexClass 以获取所有列表。

    【讨论】:

    • 我在添加更新后考虑过这个问题,但它实际上并没有解决他们更新的问题,他们要求第十个数据点(假设一些缺失的数据)而不是每个数据点的第十天月。
    猜你喜欢
    • 2014-03-18
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多