Как да начертаете повторения в 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