【发布时间】:2021-04-13 04:41:02
【问题描述】:
我一直在用 R 写这个逻辑。有人可以帮我写这个逻辑吗?
逻辑:
(Priority1) 对于一个项目,Date1 == Calendar 然后我们必须选择该行。例如 - 项目 B
(Priority2) 对于一个项目,如果不是 Priority1,则 Date1 ~ Calendar 列中的上一个日期,然后选择该行。例如 - 项目 C
(Priority3) 对于一个项目,如果不是 Priority1 & 2,则 Date1 ~ 日历列中的下一个日期,然后选择该行。例如 - 项目 A
输入:
Item Date1 Calendar
A 2021-01-08 2021-01-11
A 2021-01-08 2021-01-19
B 2021-02-05 2021-01-29
B 2021-02-05 2021-02-05
B 2021-02-05 2021-02-12
C 2021-02-15 2021-02-07
C 2021-02-15 2021-02-13
C 2021-02-15 2021-02-20
C 2021-02-15 2021-02-27
这是数据的dput
input <- structure(list(Item = c("A", "A", "B", "B","B", "C", "C","C","C"), Date1 = c("2021-01-08",
"2021-01-08", "2021-02-05", "2021-02-05", "2021-02-05", "2021-02-15", "2021-02-15", "2021-02-15", "2021-02-15"), Calendar = c("2021-01-11", "2021-01-19", "2021-01-29", "2021-02-05","2021-02-12", "2021-02-07","2021-02-13", "2021-02-20", "2021-02-27")), class = "data.frame", row.names = c(NA, -9L))
输出:
Item Date1 Calendar
A 2021-01-08 2021-01-11
B 2021-02-05 2021-02-05
C 2021-02-15 2021-02-13
这是预期输出的dput。
output <- structure(list(Item = c("A","B", "C"), Date1 = c("2021-01-08","2021-02-05", "2021-02-15"), Calendar = c("2021-01-11","2021-02-05","2021-02-13")), class = "data.frame", row.names = c(NA, -3L))
【问题讨论】: