简体   繁体   English

在R中对齐时间序列

[英]Align timeseries in R

I have a data frame like this. 我有一个这样的数据框。

         date    X1    X2 
1: 2001-12-31 96.32    NA    
2: 2002-01-29    NA 100.7   
3: 2002-01-31 96.59    NA     
4: 2002-02-28 96.67 100.7     
5: 2002-03-29    NA 100.7     
6: 2002-03-31 97.36    NA     
7: 2002-04-29    NA  87.3     
8: 2002-04-30 97.72    NA     
9: 2002-05-29    NA  87.3     
10:2002-05-31 97.60    NA   

I have some values with different dates and I would like to align them to month end, so would like to use X1 as a "base" and align X2 values to month end as in X1. 我有一些具有不同日期的值,我想将它们与月末对齐,因此想将X1用作“基准”,并像X1一样将X2值与月末对齐。 End product would be clean data frame without NAs and matching dates. 最终产品将是没有NA和匹配日期的干净数据框。

Expected output: 预期产量:

         date    X1    X2
1: 2001-12-31 96.32  NA
2: 2002-01-31 96.59 100.7
3: 2002-02-28 96.67 100.7
4: 2002-03-31 97.36 100.7
5: 2002-04-30 97.72  87.3
6: 2002-05-31 97.60  87.3

Data 数据

df <- structure(list(date = structure(c(11687L, 11716L, 11718L, 11746L, 
    11775L, 11777L, 11806L, 11807L, 11836L, 11838L), class = "Date"), 
        X1 = c(96.32, NA, 96.59, 96.67, NA, 97.36, NA, 97.72, NA, 
        97.6), X2 = c(NA, 100.7, NA, 100.7, 100.7, NA, 87.3, NA, 
        87.3, NA)), .Names = c("date", "X1", "X2"), row.names = c(NA, 
    10L), class = "data.frame")

We could try the following using data.table . 我们可以使用data.table尝试以下操作。

library(data.table)
setDT(df)[,month := month(date)][,lapply(.SD, max, na.rm = TRUE), by = month]
#   month       date    X1    X2
#1:    12 2001-12-31 96.32  -Inf
#2:     1 2002-01-31 96.59 100.7
#3:     2 2002-02-28 96.67 100.7
#4:     3 2002-03-31 97.36 100.7
#5:     4 2002-04-30 97.72  87.3
#6:     5 2002-05-31 97.60  87.3

There is a new variable month that has been created for grouping purposes (and to keep the original date column), you can always get rid of it if not needed afterwards. 为分组目的(并保留原始date列)创建了一个新的可变month ,如果以后不需要,可以随时删除它。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM