问题描述
df <- data.frame(ID=c(1,1,2,3,3),values=c(NA,NA,12,13,5,1))
我想要这样的输出,以便将最后的观察结果(按组)向前推进,除非在一个填充值之前只有 NA 值,然后我希望向后进行最后一次观察:
df <- data.frame(ID=c(1,values=c(12,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,2,3,3),values=c(NA,NA,12,13,5,1))
df2 <- data.frame(ID=c(1,values=c(12,1))
df <- df %>%
group_by(ID) %>%
fill(values,.direction = "downup") %>%
fill(values,.direction = "updown")