R中末次观测值的前推和后推

js81xvg6  于 2023-10-13  发布在  其他
关注(0)|答案(1)|浏览(120)

我有一个这样的数据集

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))

我一直在和动物园套餐里的dobur和na.locf一起工作。到目前为止,我的方法是这样的:

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

然而,这只是最后一个观察结果。在na.locf函数中的“fromLast”规范将最后一个观察值向后进位。
但是我如何连接这两个,以便使用这两个函数:

  • na.LOCF,如果在第一个填写值之前没有NA值
  • na.LOCF(fromLast)表示如果在填写的第一个值之前存在NA值,则向后携带最后一个观测值。

非常感谢您的评分!

68bkxrlz

68bkxrlz1#

这应该是可行的:

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")

相关问题