这是我的虚拟数据集。
ID Order Case Date_created
123456 25800265 1 2018-06-27 07:40:23
123456 25800265 1 2018-06-25 05:29:23
123456 25800265 0 2018-07-26 06:16:28
789454 25906588 1 2018-07-12 05:59:50
789454 25906588 0 2018-07-12 07:41:29
789454 25906588 0 2018-07-10 05:43:45
789454 25906588 0 2018-07-09 05:59:26
789454 25906588 0 2018-07-05 10:39:45
287541 32140567 0 2018-07-12 07:41:29
287541 32140567 0 2018-07-10 05:43:45
287541 32140567 0 2018-07-09 05:59:26
287541 32140567 0 2018-07-05 10:39:45
根据以下条件,我只需要每个订单一条记录。 当订单的“Case”中同时包含 0 和 1 时,返回 Case=1 的记录。如果存在 Case=1 的多个记录,则获取旧的 Date_created 记录。 如果订单只有 Case=0,则返回 Date_created 日期最早的记录。
即
ID Order Case Date_created
123456 25800265 1 2018-06-25 05:29:23
789454 25906588 1 2018-07-12 05:59:50
287541 32140567 0 2018-07-05 10:39:45
在 Redshift 中,我可以使用以下代码来完成此操作。
从中选择 *
(
选择 *,
ROW_NUMBER()over(按订单顺序按案例描述分区,创建日期) 作为最新时间
来自表
)其中latest_time=1
如何在 R 中实现这一点?
最佳答案
给你:
library(dplyr)
df <- data.frame(
ID = c("123456","123456","123456","789454","789454","789454","789454","789454","287541","287541","287541","287541"),
Order = c("25800265","25800265","25800265","25906588","25906588","25906588","25906588","25906588","32140567","32140567","32140567","32140567"),
Case = c(1,1,0,1,0,0,0,0,0,0,0,0),
Date_created = c("2018-06-27 07:40:23","2018-06-25 05:29:23","2018-07-26 06:16:28","2018-07-12 05:59:50","2018-07-12 07:41:29","2018-07-10 05:43:45","2018-07-09 05:59:26","2018-07-05 10:39:45","2018-07-12 07:41:29","2018-07-10 05:43:45","2018-07-09 05:59:26","2018-07-05 10:39:45"),
stringsAsFactors = F
)
df %>%
mutate(Date_created = as.POSIXct(Date_created)) %>%
group_by(Order) %>%
arrange(desc(Case), Date_created) %>%
mutate(row = row_number()) %>%
ungroup() %>%
filter(row == 1) %>%
select(-row) %>%
arrange(Order)
关于r - 如何在R中使用具有多个条件的排名函数Row_number,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53938154/