Загрузка данных:
df <- data.frame(
Type = c("Quote", "Quote", "Quote", "Order", "Order") %>% factor(levels = c("Quote", "Order")),
Date = c("01-01-2020", "01-02-2020", "05-03-2020", "03-01-2020", "05-04-2020") %>%
as.Date(format = "%d-%m-%Y"),
Material = c("A", "B", "C", "A", "B") %>% factor(levels = c("A", "B", "C")),
Customer = paste0("Cust", c(1, 2, 3, 1, 2)) %>% factor(levels = paste0("Cust", 1:3))
)
df
Type Date Material Customer
1 Quote 2020-01-01 A Cust1
2 Quote 2020-02-01 B Cust2
3 Quote 2020-03-05 C Cust3
4 Order 2020-01-03 A Cust1
5 Order 2020-04-05 B Cust2
Сначала я хотел использовать mutate
, но ваше логическое утверждение было слишком запутанным. Это for
l oop безобразно, но должно работать:
df$`Won Quote` <- NA
for (i in seq_len(nrow(df))){
if (df[i, "Type"] == "Quote" &
any((df$Type == "Order") &
(df$Date < df[i, "Date"] + 30) &
(df$Material == df[i, "Material"]) &
(df$Customer == df[i, "Customer"])
)
) df$`Won Quote`[i] <- "Won"
else df$`Won Quote`[i] <- "Lost"
}
df
Type Date Material Customer Won Quote
1 Quote 2020-01-01 A Cust1 Won
2 Quote 2020-02-01 B Cust2 Lost
3 Quote 2020-03-05 C Cust3 Lost
4 Order 2020-01-03 A Cust1 Lost
5 Order 2020-04-05 B Cust2 Lost