R 中的最后一次观察向前进行,最后一次观察向后进行

Last observation carried forward and last observation carried backward in R

我有一个看起来像这样的数据集

df <- data.frame(ID=c(1,1,1,1,1,2,2,2,3,3), values=c(NA, NA, 12, 13, NA, 5, NA, NA, NA, 1))

我想要这样的输出,以便最后的观察结果(按组)结转,除非在一个填充值之前只有 NA 值,然后我希望最后的观察结果向后结转:

df <- data.frame(ID=c(1,1,1,1,1,2,2,2,3,3), values=c(12, 12, 12, 13, 13, 5, 5, 5, 1, 1))

我一直在使用 zoo 包中的 dplyr 和 na.locf。到目前为止,我的方法是这样的:

df%>%
group_by(PID%>%
mutate_all(funs(na.locf(., na.rm = FALSE)))

但是,这只是将上次的观察结转。 na.locf 函数中的规范“fromLast”确实向后进行了最后一次观察。

但是我如何连接这两个,以便使用两个函数:

在此先感谢您!

这应该有效:

library(tidyverse)
df <- data.frame(ID=c(1,1,1,1,1,2,2,2,3,3), values=c(NA, NA, 12, 13, NA, 5, NA, NA, NA, 1))
df2 <- data.frame(ID=c(1,1,1,1,1,2,2,2,3,3), values=c(12, 12, 12, 13, 13, 5, 5, 5, 1, 1))

df <- df %>%
  group_by(ID) %>%
  fill(values, .direction = "downup") %>%
  fill(values, .direction = "updown")