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

fill in NA based on the last non-NA value for each group in R

本问题已经有最佳答案,请猛点这里访问。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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。我的输出应如下所示:

1
2
3
4
5
6
7
8
9
10
11
   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实现此目标的任何想法吗?


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

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