r - 在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
任何帮助,将不胜感激。谢谢你的时间!
解决方案
这是一种使用方法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")
推荐阅读
- c# - 如何修复此按钮脚本?
- python - 在 CentOS for Python 上升级 Sqlite3 版本时出现问题
- java - 如何使用 XSLT 检测 JPEG2000 并将其转换为 JPEG、BMP 或 PNG?
- json - System.Text.Json 解析存在于字符串内部的文档
- c# - 为 F# 数据层使用单独的迁移项目
- jmeter - Bean Shell 脚本为 Jmeter 中的延迟返回 0
- matlab - Simulink Design Verifier:输入参数 #1 是无效的 cvdata 对象
- android - 包 AlertDialog 不存在
- typescript - VSCode TypeScript rxjs map() 运算符在重复足够多后会丢失类型
- nginx - 无法从外部 IP 地址访问 Tomcat