使用序列号在data.frame列中继续数字系列

我有一个数据框:

df <- data.frame(A = letters[1:10], B = c(1,1,2,2,3,4,5,NA,NA,NA))
df
   A  B
1  a  1
2  b  1
3  c  2
4  d  2
5  e  3
6  f  4
7  g  5
8  h NA
9  i NA
10 j NA

在 B 列中,我想替换 NA 并使用下一个数字继续数字系列,以获得如下所示的数据框:

df
   A  B
1  a  1
2  b  1
3  c  2
4  d  2
5  e  3
6  f  4
7  g  5
8  h  6
9  i  7
10 j  8

听起来很简单,但我还没有想出一种方法来做到这一点。

欢迎任何想法/指针,最好有一个 tidyverse 解决方案 - 谢谢!

回答

这是基于zoo函数的单行解决方案na.locf0(“之后NA,最后一次观察结转”):

library(zoo)
library(dplyr)
df %>% 
  mutate(B = ifelse(is.na(B), na.locf0(B) + cumsum(is.na(B)), B))
   A B
1  A 1
2  B 1
3  C 2
4  D 2
5  E 3
6  F 4
7  G 5
8  H 6
9  I 7
10 J 8

数据:

df <- data.frame(A = LETTERS[1:10], 
                 B = c(1,1,2,2,3,4,5,NA,NA,NA))


以上是使用序列号在data.frame列中继续数字系列的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>