R 如何计算有滞后的两列的时差

R 如何计算有滞后的两列的时差,r,dplyr,lubridate,difftime,R,Dplyr,Lubridate,Difftime,我目前正面临纽约一位司机的出租车出行数据集。我得到了司机的身份证,还有每次出行的接送日期和时间以及下车日期和时间。现在我想计算最后一次旅行的下车时间和新旅行的上车时间之间的等待时间。因此,我必须计算具有一个滞后的两列之间的时差(因为下车时间指的是最后一次行程和下一次行程(下一列))按驾驶员ID分组(以确保我没有计算两个不同驾驶员行程之间的时差) 可能的数据集如下所示: hack_license = c("303F79923DA5DA7A10DF15E2D91CDCF7",&q

我目前正面临纽约一位司机的出租车出行数据集。我得到了司机的身份证,还有每次出行的接送日期和时间以及下车日期和时间。现在我想计算最后一次旅行的下车时间和新旅行的上车时间之间的等待时间。因此,我必须计算具有一个滞后的两列之间的时差(因为下车时间指的是最后一次行程和下一次行程(下一列))按驾驶员ID分组(以确保我没有计算两个不同驾驶员行程之间的时差)

可能的数据集如下所示:

hack_license = c("303F79923DA5DA7A10DF15E2D91CDCF7","697ABFCDF7E7C77A01183C857132F2A4","697ABFCDF7E7C77A01183C857132F2A4","697ABFCDF7E7C77A01183C857132F2A4","ABE23CA71E2DE84972281BA1C70B6EBB","ABE23CA71E2DE84972281BA1C70B6EBB","BA83D7C383EAA4F9D78A1A8B83CB3E92","BA83D7C383EAA4F9D78A1A8B83CB3E92","D476A1872F1F6594BD638C274483ED06","D476A1872F1F6594BD638C274483ED06")

pickup_datetime = c("2013-12-31 23:01:07","2013-12-31 23:04:00","2013-12-31 23:31:00","2013-12-31 23:40:00","2013-12-31 23:16:39","2013-12-31 23:24:05","2013-12-31 23:09:10","2013-12-31 23:26:26","2013-12-31 23:13:00","2013-12-31 23:22:00")

dropoff_datetime = c("2013-12-31 23:20:33","2013-12-31 23:28:00","2013-12-31 23:33:00","2013-12-31 23:48:00","2013-12-31 23:22:29","2013-12-31 23:28:37","23:21:24","2013-12-31 23:36:54","2013-12-31 23:20:00","2013-12-31 23:27:00")

data <- data.frame(hack_license,pickup_datetime,dropoff_datetime)

也许你们中的一些人可以帮我。那太好了

您可以为取车和下车创建日期时间列,并为每个
hack_许可证
计算当前取车时间和上一次下车时间之间的时间差

library(dplyr)
library(lubridate)

data <- data %>%
          mutate(pickup_datetime = ymd_hms(pickup_datetime), 
                 dropoff_datetime = ymd_hms(dropoff_datetime)) %>%
           group_by(hack_license) %>%
           mutate(waiting_time_in_secs = as.numeric(difftime(pickup_datetime, 
                                lag(dropoff_datetime), units = 'secs')))
data
#   hack_license                     pickup_datetime     dropoff_datetime    waiting_time_in_secs
#   <chr>                            <dttm>              <dttm>                             <dbl>
# 1 303F79923DA5DA7A10DF15E2D91CDCF7 2013-12-31 23:01:07 2013-12-31 23:20:33                   NA
# 2 697ABFCDF7E7C77A01183C857132F2A4 2013-12-31 23:04:00 2013-12-31 23:28:00                   NA
# 3 697ABFCDF7E7C77A01183C857132F2A4 2013-12-31 23:31:00 2013-12-31 23:33:00                  180
# 4 697ABFCDF7E7C77A01183C857132F2A4 2013-12-31 23:40:00 2013-12-31 23:48:00                  420
# 5 ABE23CA71E2DE84972281BA1C70B6EBB 2013-12-31 23:16:39 2013-12-31 23:22:29                   NA
# 6 ABE23CA71E2DE84972281BA1C70B6EBB 2013-12-31 23:24:05 2013-12-31 23:28:37                   96
# 7 BA83D7C383EAA4F9D78A1A8B83CB3E92 2013-12-31 23:09:10 2013-12-31 23:21:24                   NA
# 8 BA83D7C383EAA4F9D78A1A8B83CB3E92 2013-12-31 23:26:26 2013-12-31 23:36:54                  302
# 9 D476A1872F1F6594BD638C274483ED06 2013-12-31 23:13:00 2013-12-31 23:20:00                   NA
#10 D476A1872F1F6594BD638C274483ED06 2013-12-31 23:22:00 2013-12-31 23:27:00                  120
库(dplyr)
图书馆(lubridate)
数据%
变异(拾取日期时间=ymd\U hms(拾取日期时间),
dropoff_datetime=ymd_hms(dropoff_datetime))%>%
组员(黑客许可证)%>%
变异(等待时间)以秒为单位=as.numeric(difftime(拾取日期时间),
滞后(衰减时间,单位为秒)
数据
#黑客许可证领取日期时间归还日期时间等待时间秒
#                                                                          
#1303f79923da5da7a10df15e2d91cdcf7 2013-12-31 23:01:07 2013-12-31 23:20:33北美
#2697ABFCDF7E7C77A01183C857132F2A4 2013-12-31 23:04:00 2013-12-31 23:28:00北美
#3697ABFCDF7E7C77A01183C857132F2A4 2013-12-31 23:31:00 2013-12-31 23:33:00 180
#4697ABFCDF7E7C77A01183C857132F2A4 2013-12-31 23:40:00 2013-12-31 23:48:00 420
#5 ABE23CA71E2DE84972281BA1C70B6EB2013-12-31 23:16:39 2013-12-31 23:22:29 NA
#6 ABE23CA71E2DE84972281BA1C70B6EBB 2013-12-31 23:24:05 2013-12-31 23:28:37 96
#7 BA83D7C383EAA4F9D78A1A8B83CB3E92 2013-12-31 23:09:10 2013-12-31 23:21:24 NA
#8 BA83D7C383EAA4F9D78A1A8B83CB3E92 2013-12-31 23:26:26 2013-12-31 23:36:54 302
#9 D476A1872F1F6594BD638C274483ED06 2013-12-31 23:13:00 2013-12-31 23:20:00北美
#10 D476A1872F1F6594BD638C274483ED06 2013-12-31 23:22:00 2013-12-31 23:27:00 120

在使用
%%>%%
时,请不要通过
$
使用列名是的,我已经尝试过不使用$。无论哪种方式,它都会说:
mutate\u all()
忽略了以下分组变量:Column
hack\u license
嘿,Ronak,谢谢你的回复。我尝试了你的想法,它说:get中的错误(genname,envir=envir):找不到对象'vec_ptype2',你知道它的意思和我现在要做什么吗?Ronak,当它从excel中读取时间列时,你也做gsub将自动选择的“日期-时间”转换成R吗?例如,当我阅读excel时,它将时间“10:30:10”拾取为“1899-12-31 10:30:10”@MaxS,这意味着您正在调用数据中不存在的列。什么是向量类型2?我使用了基于数据图像的列名。如果您在将答案应用于数据时仍有问题,我建议您使用
dput
添加部分数据。使用
dput(head(data,10))
@KarthikS编辑您的帖子我从excel中读取时间到R时还没有遇到过这样的问题。@Ronak,我正在尝试,但似乎我的数据框太大,无法使用
dput
。我已经试着用
head()
top\n
将其分解,但问题仍然存在。是否有其他方法来创建足够的数据示例?
library(dplyr)
library(lubridate)

data <- data %>%
          mutate(pickup_datetime = ymd_hms(pickup_datetime), 
                 dropoff_datetime = ymd_hms(dropoff_datetime)) %>%
           group_by(hack_license) %>%
           mutate(waiting_time_in_secs = as.numeric(difftime(pickup_datetime, 
                                lag(dropoff_datetime), units = 'secs')))
data
#   hack_license                     pickup_datetime     dropoff_datetime    waiting_time_in_secs
#   <chr>                            <dttm>              <dttm>                             <dbl>
# 1 303F79923DA5DA7A10DF15E2D91CDCF7 2013-12-31 23:01:07 2013-12-31 23:20:33                   NA
# 2 697ABFCDF7E7C77A01183C857132F2A4 2013-12-31 23:04:00 2013-12-31 23:28:00                   NA
# 3 697ABFCDF7E7C77A01183C857132F2A4 2013-12-31 23:31:00 2013-12-31 23:33:00                  180
# 4 697ABFCDF7E7C77A01183C857132F2A4 2013-12-31 23:40:00 2013-12-31 23:48:00                  420
# 5 ABE23CA71E2DE84972281BA1C70B6EBB 2013-12-31 23:16:39 2013-12-31 23:22:29                   NA
# 6 ABE23CA71E2DE84972281BA1C70B6EBB 2013-12-31 23:24:05 2013-12-31 23:28:37                   96
# 7 BA83D7C383EAA4F9D78A1A8B83CB3E92 2013-12-31 23:09:10 2013-12-31 23:21:24                   NA
# 8 BA83D7C383EAA4F9D78A1A8B83CB3E92 2013-12-31 23:26:26 2013-12-31 23:36:54                  302
# 9 D476A1872F1F6594BD638C274483ED06 2013-12-31 23:13:00 2013-12-31 23:20:00                   NA
#10 D476A1872F1F6594BD638C274483ED06 2013-12-31 23:22:00 2013-12-31 23:27:00                  120