将NA替换为每个新NA增加1的值

时间:2015-11-11 00:02:45

标签: r

如何在每个新NA上增加1的值替换NAs,该值不符合之前的值?

以下是一个例子:

ID
1
1
NA (replaced by 1)
NA (replaced by 1)
2
2
NA (replaced by 2)
NA (replaced by 2)
3
3
NA (replaced by 3)
NA (replaced by 3)
...

这种情况下的预期结果是:

ID
1
1
1
1
2
2
2
2
3
3
3
3
...

数据

 df <- data.frame(ID=c( 1 , 1 , NA , NA , 2 , 2 , NA , NA , 3 , 3 , NA , NA ))

2 个答案:

答案 0 :(得分:4)

这是一个非常快速且无痛的解决方案:

library(zoo)
df <- data.frame(ID=c( 1 , 1 , NA , NA , 2 , 2 , NA , NA , 3 , 3 , NA , NA ))
na.locf(df)

......应该返回

   ID
   1
   1
   1
   1
   2
   2
   2
   2
   3
   3
   3
   3

答案 1 :(得分:1)

或者这个:

df <- c(1,1,NA,NA,2,2,NA,NA,3,3,NA,NA)

c(NA, df[!is.na(df)])[cumsum(!is.na(df)) + 1]
[1] 1 1 1 1 2 2 2 2 3 3 3 3