Как отображать повторения в R

Как я могу построить повторяемость в R. Приветствуется любое решение с базовым сюжетом, ggplot2, решеткой или выделенным пакетом.

Например:

Представьте, что у меня есть эти данные:

mydata <- data.frame(t=1:10, Y=runif(10))

t         Y
1 0.3744869
2 0.6314202
3 0.3900789
4 0.6896278
5 0.6894134
6 0.5549006
7 0.4296244
8 0.4527201
9 0.3064433
10 0.5783539

Я мог бы преобразовать это так:

mydata2 <- data.frame(t=c(NA,mydata$t),Y=c(NA,mydata$Y),Y2=c(mydata$Y, NA))

 t         Y        Y2   
 NA        NA 0.9103703
 1 0.9103703 0.1426041
 2 0.1426041 0.4150476
 3 0.4150476 0.2109258
 4 0.2109258 0.4287504
 5 0.4287504 0.1326900
 6 0.1326900 0.4600964
 7 0.4600964 0.9429571
 8 0.9429571 0.7619739
 9 0.7619739 0.9329098
10 0.9329098        NA

(или аналогичные методы, но у меня могут быть проблемы с отсутствующими данными) И постройте его

plot(Y2~Y, data=mydata2)

Думаю, я должен использовать какую-то функцию группировки, такую ​​как ave или apply. Но это не элегантное решение, и если у меня будет больше столбцов, может стать трудным обобщить преобразование.

Например

mydata3 <- data.frame(x=sample(10,100, replace=T),t=1:100, Y=2*runif(100)+1)

Для каждого x (или комбинации значений в других столбцах) я хочу построить Y_{i+1} ~ Y_i, на одном и том же графике.

Другие инструменты, такие как Mathematica, имеют функции для непосредственного построения последовательностей.


person skan    schedule 12.04.2016    source источник
comment
Вы ищете функцию lag?   -  person cory    schedule 12.04.2016
comment
отставание - это то, что я сделал вручную, но, как я уже сказал, я ищу что-то более прямое, что могло бы работать даже с большим количеством столбцов (по группам). И пропущенные значения не дадут ожидаемого результата.   -  person skan    schedule 13.04.2016


Ответы (1)


Я нашел решение, хотя и не очень красивое:

Для этого примера данных.

mydata <- data.frame(x=sample(4,25, replace=T),t=1:25, Y=2*runif(25)+1)

newdata <- mydata[order(mydata$x, mydata$t), ]
newdata$prev <- ave(newdata$Y, newdata$x, FUN=function(x) c(NA,head(x,-1)))
plot(Y~prev, data=newdata)

В этом примере у вас нет строк для каждого значения t, вам нужно будет сначала сгенерировать NA для отсутствующих значений. Но это просто быстрое решение. В моих реальных данных у меня есть много наблюдений для каждого t. lag.plot может отображать повторяющиеся графики, но не внутри каждой подгруппы.

person skan    schedule 13.04.2016