根据 R 中每个组的最后一个非 NA 值填写 NA [英] fill in NA based on the last non-NA value for each group in R

查看:22
本文介绍了根据 R 中每个组的最后一个非 NA 值填写 NA的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的问题是我有一个数据框 m 如下

My question is I have a dataframe m as below

y1 =c( rep("A",5),rep("B",5))
y2 = rep(c(1:5),2)
y3 = y2
y3[c(2,7,9)]=NA
m = data.frame(y1,y2,y3)

   y1 y2   y3
1   A  1    1
2   A  2 <NA>
3   A  3    3
4   A  4    4
5   A  5    5
6   B  1    1
7   B  2 <NA>
8   B  3    3
9   B  4 <NA>
10  B  5    5

我想根据该 NA前面"最接近的非 NA 值来填充 NA.我的输出应该是这样的:

I want to fill in the NA based on the closest non-NA value "in front of" this NA. My output should look like this:

   y1 y2   y3 y4
1   A  1    1  1
2   A  2 <NA>  1
3   A  3    3  3
4   A  4    4  4
5   A  5    5  5
6   B  1    1  1
7   B  2 <NA>  1
8   B  3    3  3
9   B  4 <NA>  3
10  B  5    5  5

知道如何使用 dplyr 来实现这个目标吗?

Any idea about how to use dplyr to achieve this goal?

推荐答案

这可能之前已经回答过,但我不知道它是否在 dplyr 上下文中得到了回答.zoo::na.locf() 是你的朋友:

This may have been answered before, but I don't know if it's been answered in a dplyr context. zoo::na.locf() is your friend:

m %>% group_by(y1) %>% mutate(y4=zoo::na.locf(y3))

这篇关于根据 R 中每个组的最后一个非 NA 值填写 NA的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆