微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

R中的最后一次观察向前推进和最后一次观察向后推进

如何解决R中的最后一次观察向前推进和最后一次观察向后推进

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

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”规范将最后一次观察结果向后进行。

但是我如何连接这两个,以便同时使用两个功能

  • na.LOCF 如果在第一个填充值之前没有 NA 值
  • na.LOCF(fromLast) 表示如果在填充的第一个值之前有 NA 值,则向后进行最后一次观察。

在此先感谢您!

解决方法

这应该有效:

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。