本文介绍了用时间序列 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
我正在尝试这个,但它似乎不起作用.我在处理方法时遇到 null 错误 NULL 警告
I am trying this, but it does not seem to work. I am getting null error NULL Warning encountered while processing method
replace(df,df == 0, NA)
df <- na.locf(df)
df[is.na(df)] <- 0
有什么建议吗?
更新
根据我尝试过的投票最多的答案(我修改了输入日期)
Update
As per most voted answer I tried (I modified input dates)
> 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")
> z
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
> 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
推荐答案
将来请让您的问题独立,包括库调用和 dput(x)
任何输入 的输出x
.
In the future please make your questions self-contained including the library calls and dput(x)
output of any input x
.
我们假设这是一个动物园对象,如最后所示.我们将其称为 z,因为 df 表明它是一个数据框.
We assume this is a zoo object as shown at the end. We will call it z since df suggests that its a data frame.
library(zoo)
L <- rowSums(z != 0) > 0
z[] <- coredata(z)[which(L)[cumsum(L)],]
给予:
> z
Quant1 Quant2
2013-01-18 400 200
2013-01-20 400 200
2013-01-21 400 200
2013-01-22 125 100
2013-01-23 120 0
注意:使用了这个输入:
z <- structure(c(400L, 400L, 400L, 125L, 120L, 200L, 200L, 200L, 100L,
0L), .Dim = c(5L, 2L), .Dimnames = list(NULL, c("Quant1", "Quant2"
)), index = structure(c(15723, 15725, 15726, 15727, 15728), class = "Date"),
class = "zoo")
这篇关于用时间序列 R 中的先前值替换零的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!