如何在格子中给出叠加多个时间序列的条件?

时间:2012-02-06 21:50:57

标签: r time-series lattice

假设我有一个数据框df,它看起来像:

f t1 t2 t3
h 1  3  4
h 2  4  3
t 3  4  5
t 5  6  8

f为因子,$ t属性为与时间有序事件相关的数值。 我可以使用par(new = T)将时间序列t1叠加到t3,并手动隔离因子。 但是我想知道格子是否有某种方法可以做到这一点,其中叠加了时间序列 受到因素的制约。所以我们将有两个面板,其中重叠的时间序列对应于条件因子f。我见过的大多数例子每个因子只使用一个时间序列(向量)。我也想过使用平行图,但时间信息丢失了。 我也试过像

这样的东西
xyplot(df$t1+df$t2+df$t3 ~seq(3) | factor(df$f))

,但它会丢失行序列连接。有人知道这是否可行?

这是使用非格子方法的非常粗略的说明。

x<-matrix(seq(12),4,3)
f<-c('a','a','b','b')
df<-data.frame(f,x)

layout(1:2); yr<-c(0,12); xr<-c(1,3);
plot(as.numeric(df[1,2:4])~seq(3),type='o',ylim=yr,xlim=xr,ylab='A')
par(new=T)
plot(as.numeric(df[2,2:4])~seq(3),type='o',ylim=yr,xlim=xr,ylab='A')

plot(as.numeric(df[3,2:4])~seq(3), type='o',ylim=yr,xlim=xr,ylab='B')
par(new=T)
plot(as.numeric(df[4,2:4])~seq(3),type='o',ylim=yr,xlim=xr,ylab='B')

2 个答案:

答案 0 :(得分:1)

我添加了一个ID变量并使用package:reshape2

融合
 dat
  f t1 t2 t3 ID
1 h  1  3  4  1
2 h  2  4  3  2
3 t  3  4  5  3
4 t  5  6  8  4
datm <- melt(dat, id.vars=c("ID","f"), measure.vars=c("t1", "t2", "t3"))
> datm
   ID f variable value
1   1 h       t1     1
2   2 h       t1     2
3   3 t       t1     3
4   4 t       t1     5
5   1 h       t2     3
6   2 h       t2     4
7   3 t       t2     4
8   4 t       t2     6
9   1 h       t3     4
10  2 h       t3     3
11  3 t       t3     5
12  4 t       t3     8

由于你要求它“覆盖”我使用group参数来保持ID的分开和“|”运算符为您提供“h”和“t”的两个面板:

xyplot(value~variable|f, group=ID, data=datm, type="b")

enter image description here

答案 1 :(得分:1)

(1)这可以使用xyplot.zoo紧凑地完成。第一个语句将数据框转换为动物园系列(系列存储在zoo对象的列中),第二个语句将其绘制成屏幕参数定义每个系列显示在哪个面板中:

library(zoo)
library(lattice)

z <- zoo(t(df[-1]))

xyplot(z, screen = df$f, type = "o")

(2)或者如果希望在X轴上显示df的列名,则将z定义为以下(然后在上面发出xyplot命令) :

z <- zoo(t(df[-1])), factor(names(df[-1])))
在第一个点使用xyplot

z看起来像这样(除了X轴标签,第二个是相同的):

xyplot.zoo output

编辑:简化(2)