绘制时间序列并省略缺失数据

5
我正在尝试绘制一些时间数据,其中存在一些间隔。您可以在此处查看图表:http://www.tiikoni.com/tis/view/?id=da222e2
问题在于,在时间序列的间隔期间,线条图被插值过程所覆盖,而我不希望出现这种情况。我已经尝试使用NA标志交错间隔,但是由于有大约10000个来自多个文件的数据点进行排序,因此手动添加NA标志变得困难。如果无法定义plot(0function的行为,是否有其他绘图工具可用,例如zoo,允许我在间隔之间不绘制线条?

2
一些示例代码会很有用。 - Joris Meys
你是对的,Joris。我没有包含它的原因是因为我在想可能是我遗漏了一个绘图函数的参数。 - cmdel
3个回答

3

一旦你知道时间序列的顺序,使用merge将空隙与NA交错并不难。以下是一个简单的演示:

X <- c(1:20,41:100)
Y <- rnorm(80)

plot(X,Y,type="l")    

Z <- seq(min(X),max(X),by=1)    # I take 1 is the period.
newData <- merge(data.frame(X,Y),data.frame(X=Z),all=T)
plot(newData,type="l")

2
创建一个带有间隙的动物园系列。然后定义包括z时间点和缺失点的g。创建一个零宽度的动物园系列与z合并并绘制。
library(zoo)
z <- zoo(rnorm(12), c(1:6, 11:16)) # test data

g <- seq(start(z), end(z), 1)
zz <- merge(z, zoo(, g))
plot(zz)

1

感谢所有为我的问题做出贡献的人。

我还将这个问题发布到了R-help邮件列表中,正是从那里得到了一个程序,可以用NA标志填充缺失的数据点。问题在于时间戳不规则地分布在某些阈值内。

为了记录,以下是Duncan Murdoch的建议:

任何软件都会遇到你所遇到的问题:如何定义间隔?如果定义是一些简单的东西,比如“时间差大于X”,那么它就会相对容易:使用diff()函数找到排序后的时间序列中所有的时间差异,然后在超过X的位置插入一个新的数据点,其值为NA。例如:

t <- c(1,2,3,7,8,9,11,12,13)
x <- rnorm(length(T))
d <- diff(t)
gap <- which(d > 1.5)
if (length(gap)) {
   newT <- (t[gap] + t[gap+1])/2
   t <- c(t, newT)
   x <- c(x, rep(NA, length(newT)))
   o <- order(t)
   t <- t[o]
   x <- x[o]
}
plot(t, x, type='l')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接