我正在尝试清理一些数据,并希望用前一个日期的值替换零。我希望以下代码可以工作,但它不是
temp = c(1,2,4,5,0,0,6,7)
temp[which(temp==0)]=temp[which(temp==0)-1]
返回
1 2 4 5 5 0 6 7
而不是
1 2 4 5 5 5 6 7
我希望的。 如果没有循环,有没有一种很好的方法呢?
答案 0 :(得分:6)
该操作被称为"最后观察结果"通常用于填补数据空白。它是时间序列的常见操作,因此在包动物园中实现:
temp = c(1,2,4,5,0,0,6,7)
temp[temp==0] <- NA
library(zoo)
na.locf(temp)
#[1] 1 2 4 5 5 5 6 7
答案 1 :(得分:2)
你可以使用基本相同的逻辑,除非你想将它应用于使用rle
temp = c(1,2,4,5,0,0,6,0)
o <- rle(temp)
o$values[o$values == 0] <- o$values[which(o$values == 0) - 1]
inverse.rle(o)
#[1] 1 2 4 5 5 5 6 6