r - 如何在R中使用具有多个条件的排名函数Row_number

标签 r dplyr

这是我的虚拟数据集。

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/

相关文章:

r - 在 R 中,为什么 all(numeric(0)) 给出 TRUE 而 any(numeric(0)) 给出 FALSE?

r - 将 mutate(across(...)) 与 purrr::map 结合使用

r - 使用 dplyr 的条件累积和

r - 将日期字符串转换为 R 中的天数

r - 时间序列预测,处理已知的大订单

r - 我可以使用R属性来保存物理单位吗?

r - 基于阈值的汇总表

r - dplyr:具有部分字符串匹配的inner_join

r - 循环将因子转换为数字

r - 使用箭头函数将存储在数据框中的置信限度添加到条形图