2014-01-22 4 views
-1

У меня есть дата кадр, который выглядит примерно следующим способом:Как добавить к новой структуре данных предыдущие строки! R

x<-c(0,0,0,0,0,1,1,1,0,1,0) 
y<-c(12,12,3,45,6,5,63,2,3,4,5) 
z<-data.frame(x,y) 
z 
# x y 
#1 0 12 
#2 0 12 
#3 0 3 
#4 0 45 
#5 0 6 
#6 1 5 
#7 1 63 
#8 1 2 
#9 0 3 
#10 1 4 
#11 0 5 

Я хотел бы запустить функцию или цикл, который найти строки в x, который приравнивает к 1 и добавить в новый фрейм данных этого строка и 4 предшествующие строки.

+0

', который (г $ х == 1) 'дает вам индексы, для которых x равно 1. Вам нужны четыре предыдущих строки для всех этих индексов? – user1981275

+0

Спасибо за комментарий. Да точно для каждого из них – Jack

+0

Вы хотите, чтобы четыре блока данных (для строк в строке 6,7,8,10 'z')? Тогда вы можете сделать: 'lapply (which (z $ x == 1), function (x) z [(x-4): x,])'. Или вы хотите иметь только один кадр данных в конце? – user1981275

ответ

0

небольшой риф на @ user1981275 раствор с небольшим исправлением, если нет предыдущих строк, чтобы избежать отрицательной индексации

l <- lapply(which(z$x==1), function(x) { 
    z[(ifelse(x-4 < 1, 1, x-4)):x,] 
}) 
do.call(rbind, l) 
+0

Это на самом деле то, что я искал .. – Jack

+0

извините, я не понимаю вашего комментария. –

1

Вы можете создать индекс:

z[sapply(which(as.logical(z$x)), function(x) seq(x - 4, x)), ] 
Смежные вопросы