在时间序列 R 中对零使用最后一次观察
Using last observation for zero in time series R
我正在接受输入
Quant1 Quant2
2013-01-23 400 200
2013-01-22 0 0
2013-01-21 0 0
2013-01-20 125 100
2013-01-18 120 0
我试图获得的输出是
Quant1 Quant2
2013-01-23 400 200
2013-01-22 125 100
2013-01-21 125 100
2013-01-20 125 100
2013-01-18 120 0
根据 this question 我正在尝试获取输出,但结果不符合要求
z <- structure(c(400L, 0L, 0L, 125L, 120L, 200L, 0L, 0L, 100L,
0L), .Dim = c(5L, 2L), .Dimnames = list(NULL, c("Quant1", "Quant2"
)), index = structure(c(15728, 15727, 15726, 15725, 15723), class = "Date"),
class = "zoo")
L <- rowSums(z != 0) > 0
z[] <- coredata(z)[which(L)[cumsum(L)],]
z
Quant1 Quant2
2013-01-23 400 200
2013-01-22 0 0
2013-01-21 0 0
2013-01-20 0 0
2013-01-18 120 0
您似乎正在为零条目而苦苦挣扎。为什么不使用 NA
?如果我的假设是正确的,na.locf
就是你需要的函数。
coredata(z)[coredata(z) == 0] <- NA
na.locf(z, fromLast = T)
Quant1 Quant2
2013-01-18 120 NA
2013-01-20 125 100
2013-01-21 125 100
2013-01-22 125 100
2013-01-23 400 200
如果您确实需要 0
而不是 NA
,请在 na.locf
之后替换回来。
我正在接受输入
Quant1 Quant2
2013-01-23 400 200
2013-01-22 0 0
2013-01-21 0 0
2013-01-20 125 100
2013-01-18 120 0
我试图获得的输出是
Quant1 Quant2
2013-01-23 400 200
2013-01-22 125 100
2013-01-21 125 100
2013-01-20 125 100
2013-01-18 120 0
根据 this question 我正在尝试获取输出,但结果不符合要求
z <- structure(c(400L, 0L, 0L, 125L, 120L, 200L, 0L, 0L, 100L,
0L), .Dim = c(5L, 2L), .Dimnames = list(NULL, c("Quant1", "Quant2"
)), index = structure(c(15728, 15727, 15726, 15725, 15723), class = "Date"),
class = "zoo")
L <- rowSums(z != 0) > 0
z[] <- coredata(z)[which(L)[cumsum(L)],]
z
Quant1 Quant2
2013-01-23 400 200
2013-01-22 0 0
2013-01-21 0 0
2013-01-20 0 0
2013-01-18 120 0
您似乎正在为零条目而苦苦挣扎。为什么不使用 NA
?如果我的假设是正确的,na.locf
就是你需要的函数。
coredata(z)[coredata(z) == 0] <- NA
na.locf(z, fromLast = T)
Quant1 Quant2
2013-01-18 120 NA
2013-01-20 125 100
2013-01-21 125 100
2013-01-22 125 100
2013-01-23 400 200
如果您确实需要 0
而不是 NA
,请在 na.locf
之后替换回来。