如何在循环中使用if else语句?

时间:2019-06-27 14:21:55

标签: r loops if-statement

我试图在一个名为“ 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与当前的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
  } 
  }

该代码大部分可用,除了将Well 2 Book Date输出为数字而不是日期之外。在线日期1已经是一个日期类。

1 个答案:

答案 0 :(得分:1)

一个选项是lagcase_when

library(dplyr)
df1 %>%
     mutate(NewDate = case_when(ID2 == lag(ID2) ~ lag(Date2), TRUE ~ Date1 + 60))