R - XTS:从缺少行的每日时间序列中获取每个月的第一个日期和值 [英] R - XTS: Get the first dates and values for each month from a daily time series with missing rows

查看:31
本文介绍了R - XTS:从缺少行的每日时间序列中获取每个月的第一个日期和值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 R 中有一个作为 myxts xts 对象的每日时间序列,日期格式为 d/m/y.现在,我想将原始时间序列减少到只取序列中每个月的第一个日期和值的时间序列.

I have a daily time series as a myxts xts object in R, with date format being d/m/y. Now, I want to reduce the original time series to one that only takes the first date and value for each month in the series.

myxts[.indexmday(myxts) == 1] 返回包含 d/m/y 且 d = 1 的系列.

myxts[.indexmday(myxts) == 1] returns a series containing d/m/y with d = 1.

我的问题是我每个月都需要 1 个数据,我的问题是我的原始系列有一些月份没有日期和第 1 个日历日期的数据.

My problem is that I need 1 data for each month and my problem is that my original series has some months with no date and data for the date 1st calendar date.

如果没有这样的日期,我如何对 R 说,然后取这个特定月份的第 2 天,如果后者不可用,则取第三天,依此类推...

How does I say to R if there is not such a date, then takes the 2nd day for this particular month, and if the latter is not available then take the third, and so on ...

例如,在下面的示例数据中,没有 2014 年 2 月 1 日.也没有 1 月 1 日.

Eg, in the example data below, there is no Feb 1st, 2014. There is no Jan 1st either.

dates <- c('14/02/2014', '13/02/2014', '12/02/2014', '11/02/2014', '10/02/2014', '07/02/2014', '06/02/2014', '05/02/2014', '04/02/2014', '03/02/2014', '31/01/2014', '30/01/2014', '29/01/2014', '28/01/2014', '27/01/2014', '24/01/2014', '23/01/2014', '22/01/2014', '21/01/2014', '20/01/2014', '17/01/2014', '16/01/2014', '15/01/2014', '14/01/2014', '13/01/2014', '10/01/2014', '09/01/2014', '08/01/2014', '07/01/2014', '06/01/2014', '03/01/2014', '02/01/2014', '31/12/2013', '30/12/2013', '27/12/2013', '26/12/2013', '24/12/2013', '23/12/2013', '20/12/2013', '19/12/2013', '18/12/2013', '17/12/2013', '16/12/2013', '13/12/2013', '12/12/2013', '11/12/2013', '10/12/2013', '09/12/2013', '06/12/2013', '05/12/2013', '04/12/2013', '03/12/2013', '02/12/2013', '29/11/2013', '28/11/2013', '27/11/2013', '26/11/2013', '25/11/2013', '22/11/2013', '21/11/2013', '20/11/2013', '19/11/2013', '18/11/2013', '15/11/2013', '14/11/2013', '13/11/2013', '12/11/2013', '11/11/2013', '08/11/2013', '07/11/2013', '06/11/2013', '05/11/2013', '04/11/2013', '01/11/2013', '31/10/2013', '30/10/2013', '29/10/2013', '28/10/2013', '25/10/2013', '24/10/2013', '23/10/2013', '22/10/2013', '21/10/2013', '18/10/2013', '17/10/2013', '16/10/2013', '15/10/2013', '14/10/2013', '11/10/2013', '10/10/2013', '09/10/2013', '08/10/2013', '07/10/2013', '04/10/2013', '03/10/2013', '02/10/2013', '01/10/2013', '30/09/2013', '27/09/2013', '26/09/2013', '25/09/2013', '24/09/2013', '23/09/2013', '20/09/2013', '19/09/2013', '18/09/2013', '17/09/2013', '16/09/2013', '13/09/2013', '12/09/2013', '11/09/2013', '10/09/2013', '09/09/2013', '06/09/2013', '05/09/2013', '04/09/2013', '03/09/2013', '02/09/2013', '30/08/2013', '29/08/2013', '28/08/2013', '27/08/2013', '26/08/2013', '23/08/2013', '22/08/2013', '21/08/2013', '20/08/2013', '19/08/2013', '16/08/2013', '15/08/2013', '14/08/2013', '13/08/2013', '12/08/2013', '09/08/2013', '08/08/2013', '07/08/2013', '06/08/2013', '05/08/2013', '02/08/2013', '01/08/2013', '31/07/2013', '30/07/2013', '29/07/2013', '26/07/2013', '25/07/2013', '24/07/2013', '23/07/2013', '22/07/2013', '19/07/2013', '18/07/2013', '17/07/2013', '16/07/2013', '15/07/2013', '12/07/2013', '11/07/2013', '10/07/2013', '09/07/2013', '08/07/2013', '05/07/2013', '04/07/2013', '03/07/2013', '02/07/2013', '01/07/2013', '28/06/2013') 
values <- c(920.25, 918.5, 921.5, 921.5, 921, 919, 906.25, 899, 906.25, 903, 917, 924, 923.75, 917.5, 914.5, 921.75, 922.5, 919, 919, 907.75, 916.25, 907.5, 913.75, 900.25, 907, 907.25, 907.25, 912.25, 910.5, 910.25, 910.25, 923.5, 944.25, 945.5, 955.75, 950, 944.25, 945.75, 945.25, 935.25, 929, 919.5, 931.5, 917.75, 932, 932, 928, 934.25, 940.75, 943.75, 947.25, 945.75, 942.75, 943, 942, 941, 944.5, 934.75, 937.75, 923.25, 911, 910.75, 910.25, 911.25, 908.75, 901.25, 903.25, 903.25, 893, 888.5, 905, 903, 904, 915, 932.5, 937.25, 930.5, 925.75, 909.75, 911.5, 920, 936.5, 941.5, 939.25, 931.5, 945, 940.25, 931.5, 933.5, 925.25, 925.25, 935.5, 926.25, 922.5, 926.5, 922.5, 905.25, 913, 927.25, 920.5, 919, 906, 913, 925.25, 934.5, 924.25, 925.75, 944.25, 949.75, 943.5, 943.5, 938.75, 960, 971, 963.75, 960.75, 960.25, 958.5, 969.5, 978.75, 970, 961.75, 940.25, 941.75, 936.25, 938.75, 938.75, 942.25, 941.25, 937.25, 926, 927.75, 903.75, 903.75, 896, 906, 909.25, 920.25, 923.75, 927, 910.5, 908, 913.75, 910.5, 913.75, 914.25, 919.75, 918.5, 925.75, 928.75, 923.75, 919.75, 916.5, 916.25, 913.75, 913.75, 909.25, 913.25, 911.75, 902.25, 903.25, 879.75, 883.25, 883.25)
myxts <- as.xts(values, order.by = as.Date(dates, format = '%d/%m/%Y'))

推荐答案

有一个未导出的 startof 函数可能在这里有用

There is an unexported startof function that could be useful here

myxts[xts:::startof(myxts, "months")]
             [,1]
2013-06-28 883.25
2013-07-01 883.25
2013-08-01 927.00
2013-09-02 958.50
2013-10-01 905.25
2013-11-01 915.00
2013-12-02 942.75
2014-01-02 923.50
2014-02-03 903.00

这篇关于R - XTS:从缺少行的每日时间序列中获取每个月的第一个日期和值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆