我正在尝试使用一些缺少的值填充复制的时间序列数据,并且尝试了服务器方法,但是没有一种方法。
数据应如下所示:
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
有人可以帮助我解决这个问题吗?非常感谢你!
答案 0 :(得分:0)
这是complete
的一个选项。根据“年”的“最小”值的出现创建列“ grp”后,使用complete
将{年份}从min
扩展到max
,{{1} },seq
基于'grp'的行,并删除'grp'列
arrange
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