Если условие выполнено, перейдите на 6 строк выше и выберите значение в R

#r #if-statement #goto

#r #оператор if #перейти

Вопрос:

образец данных

Я пытаюсь выполнить в R следующее: в моем наборе данных (md2, прилагается), если L_ID= 1, перейдите на 6 строк выше и создайте новый фрейм данных с переменной Hway. Я использую следующую команду:

 spc <- data.frame(md$Hdwy[c(md2$L_ID[-6], 0) == 1])
 

Ожидая увидеть:

 > spc
44.46 40.00
 

Кажется, это работает, однако, когда я проверил, я заметил, что он выбирает значение на 1 строку выше вместо 6:

 > spc
    40.1 40.00
 

Есть идеи?

Комментарии:

1. Анна, пожалуйста, предоставьте примеры данных и ожидаемый результат с учетом этих данных .

Ответ №1:

Как насчет чего-то подобного?

 library(dplyr)
spc <- md2 %>%
         mutate(Lag = lag(Hdwy, 6L)) %>%
         filter(L_ID==1) %>%
         pull(Lag)
spc
[1] 44.46 40.00
 

Или с базой R:

 spc <- md2$Hdwy[which(md2$L_ID == 1) - 6]
spc
[1] 44.46 40.00
 

Пример данных:

 md2 <- structure(list(Hdwy = c(45.01, 45.03, 449, 44.46, 43.63, 425, 
41.36, 40.53, 40.1, 39.97, 39.98, 40, 40, 40, 40, 41.36, 40.53, 
40.1, 40, 40), L_ID = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 1)), class = "data.frame", row.names = c(NA, 
-20L))