根据R中每个组的最后一个非NA值填写NA

时间:2014-11-29 21:11:17

标签: r dplyr na

我的问题是我的数据框m如下所示

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值&#34;在&#34;前面填写NA。这个NA。我的输出应该如下所示:

   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来实现此目标的任何想法吗?

1 个答案:

答案 0 :(得分:19)

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

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