Как построить наложение нескольких временных рядов данных условий в решетке? - PullRequest
3 голосов
/ 07 февраля 2012

Предположим, у меня есть фрейм данных df, который выглядит следующим образом:

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

, где f - это фактор, а $ t - числовые значения, связанные с упорядоченными по времени событиями.Я мог бы наложить временные ряды от t1 до t3, используя par (new = T) и выделить по фактору вручную.Но мне интересно, есть ли какой-нибудь способ сделать это с решеткой, где наложенные временные ряды обусловлены фактором.Таким образом, у нас будет две панели с наложенными временными рядами, соответствующими условным факторам, 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 ]

1 голос
/ 07 февраля 2012

(1) Это можно сделать компактно, используя xyplot.zoo.Первый оператор преобразует фрейм данных в ряд зоопарка (ряды хранятся в столбцах в объектах зоопарка), а второй оператор отображает его так, что аргумент экрана определяет, на какой панели отображается каждая серия:

library(zoo)
library(lattice)

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

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

(2) или, если необходимо, чтобы вместо имен столбцов df отображалась ось X, определите z следующим образом (а затем введите команду xyplot выше):

z <- zoo(t(df[-1])), factor(names(df[-1])))

xyplot с использованием z в первой точке выглядит следующим образом (а вторая такая же, за исключением меток оси X):

xyplot.zoo output

РЕДАКТИРОВАТЬ: упрощено (2)

1 голос
/ 07 февраля 2012

Я добавил переменную ID и растаял с пакетом: 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, чтобы сохранить идентификатор отдельно и «|»оператор, чтобы дать вам две панели для «ч» и «т»:

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

enter image description here

...