如何为复制的时间序列数据填充缺失值?
How to fill the missing values for a replicated time series data?
我正在尝试用一些缺失值填充复制的时间序列数据,我尝试了几种方法,但 none 有效。
数据应该是这样的:
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)
,
会 return:
Error in fix.by(by.x, x) : 'by' must specify a uniquely valid column
谁能帮我解决这个问题?非常感谢!
这是 complete
的一个选项。根据 "Year" 的 'min' 值的出现创建列 'grp' 后,使用 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
))
我正在尝试用一些缺失值填充复制的时间序列数据,我尝试了几种方法,但 none 有效。
数据应该是这样的:
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)
,
会 return:
Error in fix.by(by.x, x) : 'by' must specify a uniquely valid column
谁能帮我解决这个问题?非常感谢!
这是 complete
的一个选项。根据 "Year" 的 'min' 值的出现创建列 'grp' 后,使用 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
))