Как заполнить пропущенные значения для реплицированных данных временного ряда? - PullRequest
0 голосов
/ 15 января 2019

Я пытаюсь заполнить реплицированные данные временного ряда некоторыми пропущенными значениями, и я попробовал несколько методов, но ни один не работает.

Данные должны быть такими:

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) строк.

Кроме того, я попытался cbind.fill из пакета rowr, он просто добавил NAs в конце df.Если я использую

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

, он вернется:

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

Может кто-нибудь помочь мне с этой проблемой?Большое спасибо!

1 Ответ

0 голосов
/ 15 января 2019

Вот один вариант с complete. После создания столбца «grp» на основе значения min в «Year», используйте complete, чтобы расширить «Year» с min до max с seq, arrange на основе строк на «grp» и удалите столбец «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
  ))
...