仅在R中的第一个和最后一个观测值之间插值数据
我有点困在这里,需要一些帮助。 我试图在一个时间序列中插入一些缺失的数据,但我的许多案例(国家)只有很少的观察结果,而且往往不一致。因此,我试图在每个国家的第一次观察和最后一次观察之间进行插值。如果在一个我不想被插入的国家中,在最后一次观察后仍有一些NAs,我该怎么做仅在R中的第一个和最后一个观测值之间插值数据,r,linear-interpolation,R,Linear Interpolation,我有点困在这里,需要一些帮助。 我试图在一个时间序列中插入一些缺失的数据,但我的许多案例(国家)只有很少的观察结果,而且往往不一致。因此,我试图在每个国家的第一次观察和最后一次观察之间进行插值。如果在一个我不想被插入的国家中,在最后一次观察后仍有一些NAs,我该怎么做 data <- data.frame(country = c(1, 1, 1, 1, 2, 2, 2, 3, 3, 3), time = c(1990, 1991, 1992, 1993, 1
data <- data.frame(country = c(1, 1, 1, 1, 2, 2, 2, 3, 3, 3),
time = c(1990, 1991, 1992, 1993, 1990, 1991, 1992, 1990, 1991, 1992),
value = c(5, 6, 7, NA, 5, NA, 7, 5, 6, 7))
print(data)
data %>% group_by(country) %>%
mutate(int = na_interpolation(value))
数据%group\u by(国家)%%>%
变异(int=na_插值(值))
我希望1国1993年的价值保持不变。这可能很简单,但我不能把我的头围绕着它 也许您可以使用
lm
+predict
尝试以下代码(所有NA
都将被预测)
编辑:
这是一个基本的R解决方案,它将在国家1保持1993年的NA
data <- do.call(rbind,
c(lapply(split(data,data$country),
function(v) within(v, value <- approx(time[!is.na(value)],value[!is.na(value)],time)$y)),
make.row.names = F)
)
尝试使用“zoo”软件包中的na.appro功能
希望这是您正在寻找的,这将使国家1中的NA保持为NA。您好,您希望输入什么值。希望这会有所帮助。
data$value我希望对组2中缺失的值进行插值(在示例中,是its 6,与插值函数一样),但组1中缺失的值不会,因为它位于该组中的最后一个值之后(在本例中为7,在您的示例中为1)。谢谢,就是这样!谢谢,这有助于我更进一步@H.Stevens我刚刚注意到,您希望将国家1中1993年的值保留为NA
。除了公认的答案外,我还添加了另一个解决方案,即基本的R版本
> data
country time value
1 1 1990 5
2 1 1991 6
3 1 1992 7
4 1 1993 8
5 2 1990 5
6 2 1991 6
7 2 1992 7
8 3 1990 5
9 3 1991 6
10 3 1992 7
data <- do.call(rbind,
c(lapply(split(data,data$country),
function(v) within(v, value <- approx(time[!is.na(value)],value[!is.na(value)],time)$y)),
make.row.names = F)
)
> data
country time value
1 1 1990 5
2 1 1991 6
3 1 1992 7
4 1 1993 NA
5 2 1990 5
6 2 1991 6
7 2 1992 7
8 3 1990 5
9 3 1991 6
10 3 1992 7
data %>% group_by(country) %>% mutate(int = na.approx(value, na.rm=FALSE))