使用序列号在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))