[英]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.