Как да изберете редове в R рамка с данни въз основа на стойностите на предишните редове

Имам нещо като прост проблем, който не успях да разреша. Имам R рамка с данни, която се състои от една колона от точки с данни, както е показано по-долу. Бих искал да направя поднабор в нов кадър от данни, който съдържа точки от данни въз основа на стойността на предишни точки от данни.

Така че по-долу бих искал например да подмножествам всички редове, където предишната стойност е била по-голяма от .04. Всякакви идеи ще бъдат оценени. Благодаря ти.

         Price
[1,] -0.006666667
[2,]  0.040268456
[3,]  0.051612903
[4,] -0.006134969
[5,]  0.006172840
[6,]  0.006134969
[7,]  0.030487805

person user2238328    schedule 03.04.2013    source източник
comment
Тук има проблем. Това не е рамка с данни или поне не така print.data.frame я показва. Изглежда, че е R матрица.   -  person IRTFM    schedule 03.04.2013


Отговори (2)


Като този:

x[c(FALSE, head(x$Price, -1) > 0.04), , drop = FALSE]

(От вашия печат изглежда, че вашият обект може да е матрица, а не data.frame. Ако е така, заменете x$Price с x[, "Price"].)

person flodel    schedule 03.04.2013
comment
Предложение: използвайте , drop=FALSE, за да избегнете загубата на структурата data.frame. - person Ferdinand.kraft; 03.04.2013

Тези видове манипулации могат да се извършват по начин, който директно имитира нашия мисловен процес чрез използване на представяне на времеви серии. Това също има предимството, че сега е в такова представяне и това ще улесни и по-нататъшните изчисления. Да предположим, че DF е рамката с данни. Преобразувайте го в обект zoo z и след това извлечете тези компоненти на z, чието забавяне надвишава 0.04:

> library(zoo)
> z <- zoo(DF$Price)
> z[lag(z, -1) > 0.04]
           3            4 
 0.051612903 -0.006134969 

Ако result е стойността на последния ред от кода, тогава time(result) дава времената (3 и 4 в горния пример), а coredata(result) дава стойностите на данните.

person G. Grothendieck    schedule 03.04.2013