Как использовать оператор if else в цикле? - PullRequest
0 голосов
/ 27 июня 2019

Я пытаюсь создать новый столбец в кадре данных с именем «Date2», который мне придется пройти по всем предыдущим итерациям расчета.

Следующая логика.

If ID2 = Previous(ID2) then Previous(Date2) ELSE
Date1 + 60


Example:

ID2     Date 1     Date 2
1001    1/1/2019   3/2/2019
1001    1/1/2019   3/2/2019

В строке 1 Date2 - это просто Date1 + 60, так как предыдущий ID2 отличается.
В строке 2 Date2 - это просто предыдущая Date2, поскольку предыдущий ID2 совпадает с текущим.

Код:

OrderedData$Well2BookDate <- 0 # initialize, sometimes better as just `list()`

for(i in 2:nrow(OrderedData)){
  if(OrderedData[i,1]== OrderedData[i-1, 1]){
    # Previous Well 2 Book Date
    OrderedData[i,14 ] <- OrderedData[i-1, 14] 
  } else {
    # Online Date 1 + 60 Days
    OrderedData[i, 14] <- OrderedData[i, 9] + 60
  } 
  }

Этот код работает в основном, за исключением того, что «Дата 2 скважины» выводится как число, а не как дата. Дата 1 в сети уже была классом даты.

1 Ответ

1 голос
/ 27 июня 2019

Опция lag с case_when

library(dplyr)
df1 %>%
     mutate(NewDate = case_when(ID2 == lag(ID2) ~ lag(Date2), TRUE ~ Date1 + 60))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...