我试图在一个名为“ 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已经是一个日期类。
答案 0 :(得分:1)
一个选项是lag
和case_when
library(dplyr)
df1 %>%
mutate(NewDate = case_when(ID2 == lag(ID2) ~ lag(Date2), TRUE ~ Date1 + 60))