首页 > 解决方案 > 在R中查找下一个实例的时间

问题描述

我得到了前三列,并想找到第四列(NextOrderTime),这意味着每个客户的下一个 Orderfood ==“Y”。

东风:

Client    Time      Orderfood?  NextOrderTime 
 A   2021/1/7 12:00    N       2021/1/7 12:02 
 A   2021/1/7 12:01    N       2021/1/7 12:02 
 A   2021/1/7 12:02    Y       2021/1/7 12:06 
 B   2021/1/7 12:03    N       2021/1/7 12:08 
 B   2021/1/7 12:04    N       2021/1/7 12:08 
 B   2021/1/7 12:05    N       2021/1/7 12:08 
 A   2021/1/7 12:06    Y           NA 
 B   2021/1/7 12:07    N       2021/1/7 12:08 
 B   2021/1/7 12:08    Y           NA

任何帮助,将不胜感激。谢谢你的时间!

标签: r

解决方案


这是一种使用方法dplyr

我们得到Orderfood == 'Y'每个的下一个行号Client并从中得到对应Time的。

library(dplyr)

df %>%
  group_by(Client) %>%
  mutate(NextOrderTime = replace(row_number(), Orderfood == 'N', NA),  
         NextOrderTime = lead(NextOrderTime)) %>%
  tidyr::fill(NextOrderTime, .direction = 'up') %>%
  mutate(NextOrderTime = Time[NextOrderTime])

#  Client Time           Orderfood NextOrderTime 
#  <chr>  <chr>          <chr>     <chr>         
#1 A      2021/1/7 12:00 N         2021/1/7 12:02
#2 A      2021/1/7 12:01 N         2021/1/7 12:02
#3 A      2021/1/7 12:02 Y         2021/1/7 12:06
#4 B      2021/1/7 12:03 N         2021/1/7 12:08
#5 B      2021/1/7 12:04 N         2021/1/7 12:08
#6 B      2021/1/7 12:05 N         2021/1/7 12:08
#7 A      2021/1/7 12:06 Y         NA            
#8 B      2021/1/7 12:07 N         2021/1/7 12:08
#9 B      2021/1/7 12:08 Y         NA            

数据

df <- structure(list(Client = c("A", "A", "A", "B", "B", "B", "A", 
"B", "B"), Time = c("2021/1/7 12:00", "2021/1/7 12:01", "2021/1/7 12:02", 
"2021/1/7 12:03", "2021/1/7 12:04", "2021/1/7 12:05", "2021/1/7 12:06", 
"2021/1/7 12:07", "2021/1/7 12:08"), Orderfood = c("N", "N", 
"Y", "N", "N", "N", "Y", "N", "Y")), row.names = c(NA, -9L),class = "data.frame")

推荐阅读