簡體   English   中英

如何填充復制的時間序列數據的缺失值?

[英]How to fill the missing values for a replicated time series data?

我正在嘗試使用一些缺少的值填充復制的時間序列數據,並且嘗試了服務器方法,但均無用。

數據應如下所示:

Year   Var
2001   1
2002   2
2003   3
2001   4
2002   5  
2001   6
2003   7

我想要得到的是:

Year   Var
2001   1
2002   2
2003   3
2001   4
2002   5 
2003   NA 
2001   6
2002   NA
2003   7

我先嘗試通過建立一個包含我需要的整個序列的數據框來嘗試merge()

yearlabel <- data.frame(Year = rep(2001:2003, 3)    
df <- merge(df, yearlabel, all = T)

但是結果有很多length(df)*length(yearlabel)行。

另外,我嘗試從rowr包中嘗試cbind.fill ,它只是在df的末尾添加了NAs 如果我用

Map(merge, df, yearlabel, by = 'Year', all = T)

它會返回:

Error in fix.by(by.x, x) : 'by' must specify a uniquely valid column

誰能幫助我解決這個問題? 非常感謝你!

這是帶有complete一個選項。 根據出現的“年”的“最小”值創建列“ grp”后,使用complete使用seq將“年”從min擴展到max ,基於“ grp” arrange行並刪除“ grp”柱

library(tidyverse)
df1 %>%
   mutate(grp = cumsum(lag(Year  > lead(Year, default = 
                      last(Year)),default = TRUE))) %>%
   # or in this case, it can be simplified
   #mutate(grp = cumsum(Year == min(Year))) %>%
   complete(Year = min(Year):max(Year), grp) %>%
   arrange(grp) %>%
   select(-grp)
# A tibble: 9 x 2
#   Year   Var
#  <int> <int>
#1  2001     1
#2  2002     2
#3  2003     3
#4  2001     4
#5  2002     5
#6  2003    NA
#7  2001     6
#8  2002    NA
#9  2003     7

數據

df1 <- structure(list(Year = c(2001L, 2002L, 2003L, 2001L, 2002L, 2001L, 
 2003L), Var = 1:7), class = "data.frame", row.names = c(NA, -7L
  ))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM