#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]