【发布时间】:2021-06-25 22:42:28
【问题描述】:
(注意:酒店数据用作说明性示例。)
我正在使用一个数据集,该数据集包含每个客户 (custID) 的多条记录(例如“hotelStays”)。我的目标是获取自客户上次入住以来的天数作为数据框中的新列(即每个客户的第一次入住将具有“NA”作为其值)。为此,我想从每个客户当前的 checkInDt 中减去他们之前的 checkOutDt。但是,当我尝试使用 lag() 执行此操作时,新列中的所有值都是“NA”。
以下是我正在使用的数据类型的示例。
| custID | stayID | stayDt | checkInDt | checkOutDt |
|---|---|---|---|---|
| AAAAA | 11111 | 01/15/1995 | 01/10/1995 | 01/17/1995 |
| BBBBB | 11112 | 02/08/1995 | 02/02/1995 | 02/25/1995 |
| AAAAA | 11113 | 03/01/1995 | 03/01/1995 | 03/03/1995 |
| AAAAA | 11114 | 06/24/1995 | 06/22/1995 | 07/02/1995 |
| BBBBB | 11115 | 10/02/1995 | 10/01/1995 | 10/10/1995 |
| CCCCC | 11116 | 01/08/1996 | 01/05/1996 | 01/17/1996 |
| AAAAA | 11117 | 05/15/1996 | 05/10/1996 | 05/28/1996 |
理想情况下,新列“daysSinceLastStay”应具有以下值:
| daysSinceLastStay |
|---|
| NA |
| NA |
| 43 |
| 111 |
| 218 |
| NA |
| 313 |
但是,我想我需要先按 custID 和 stayDt 排序。
以下是我目前对代码的尝试:
hotelData <- hotelData %>%
arrange(custID, stayDt) %>%
mutate(daysSinceLastStay =
checkInDt - lag(checkOutDt))
非常感谢任何建议!
【问题讨论】: