4

我关于“​​在 R 中使用线性插值添加缺失的 xts/zoo 数据”的另一个问题,您可以在此处找到在 R 中使用线性插值添加缺失的 xts/zoo 数据

但总的来说,我的数据还有一个问题——我确实有没有意义的“错误”值:

"2012-04-09 05:03:00",2
"2012-04-09 05:04:00",4
"2012-04-09 05:05:39",-10
"2012-04-09 05:09:00",0
"2012-04-09 05:10:00",1

所以替换缺失的日期有效:

y <- merge(y, zoo(,seq(start(y),end(y),by="min")), all=TRUE)
y <- na.approx(y)

但正如您所见,-10 没有意义,并且值不在 min:sec 处,值为 00。我需要像 na.rm 这样的解决方案。谢谢!

4

2 回答 2

4

目前尚不清楚您想做什么。但我猜你想从 xts 对象中删除一些异常值。如果您想要像“na.rm”这样的解决方案,一个想法是替换不需要的值,NA然后使用na.omit.

x <- read.zoo(text='
"2012-04-09 05:03:00",2
"2012-04-09 05:04:00",4
"2012-04-09 05:05:39",-10
"2012-04-09 05:09:00",0
"2012-04-09 05:10:00",1',sep=',',tz='')

x[x == -10] <- NA
na.omit(x)

                    x
2012-04-09 05:03:00 2
2012-04-09 05:04:00 4
2012-04-09 05:09:00 0
2012-04-09 05:10:00 1

编辑

要获取每个日期的条件,您可以查看 index(x) 并对其进行格式化。

format(index(dat),'%S')
[1] "00" "00" "39" "00" "00"

但在这里我使用内置.indexsec(另见.indexmin,.indexhour,..)

dat[.indexsec(dat) != 0]
2012-04-09 05:05:39 
                -10
于 2013-04-15T13:03:41.677 回答
4

以下是如何用 NA 替换低于阈值(在本例中为 0)的值。之后就可以跑na.approx了。

# read in
Lines <- '"2012-04-09 05:03:00",2
"2012-04-09 05:04:00",4
"2012-04-09 05:05:39",-10
"2012-04-09 05:09:00",0
"2012-04-09 05:10:00",1
'
data2 <- as.xts(read.zoo(text = Lines, sep = ",", tz = ""))

# perform calculation
data2[data2<0] <- NA
于 2013-04-15T13:03:47.613 回答