Для каждого значения в столбце, которое = 1, извлеките значение из 3-й строки под ним в новый фрейм данных (R)

#r #dataframe

#r #фрейм данных

Вопрос:

Скажем, что у меня есть такие данные в R:

       Time    Max   Var
 1    1.1      1    5.3
 2    1.2      0    3.1
 3    1.3      0    2.5
 4    1.4      0    1.7
 5    1.5      1    7.4
 6    1.6      0    3.4
 7    1.7      0    3.3
 8    1.8      0    2.5
 9    1.9      0    1.5
10    2.0      0    1.2
11    2.1      1    9.4
 .     .       .     .
 .     .       .     .
 .     .       .     .
  

Каждый раз, когда Max = 1 (например, строка 1), я хотел бы извлечь всю строку, которая находится на 3 ниже нее (т. Е. Строка 4), и переместить эти извлеченные строки в новый фрейм данных. Это дало бы:

       Time    Max   Var
 4    1.4      0    1.7
 8    1.8      0    2.5
  

Мои попытки были безуспешными с seq и dplyr пакетом.

Спасибо!

Ответ №1:

Вы можете получить индекс всех строк, где Max = 1 и добавить 3 к нему. Сохраняйте только те индексы, которые меньше количества строк в фрейме данных.

 inds <- which(df$Max == 1)   3
inds <- inds[inds <= nrow(df)]
df[inds, ]

#  Time Max Var
#4  1.4   0 1.7
#8  1.8   0 2.5
  

В dplyr мы можем использовать lag :

 library(dplyr)
df %>% filter(lag(Max, 3) == 1)
  

и аналогично с data.table :

 library(data.table)
setDT(df)[shift(Max, 3) == 1]