在R中减去两列;其中一个由日期和时间和日期组成

时间:2017-06-20 21:09:46

标签: r

我想用timearriving和timeL减去timeA,但是我得到了这个错误:

  

“unclass(e1)中的错误 - e2:二元运算符的非数字参数”

当您看到该错误消息时,这意味着您尝试使用非数字的内容执行二进制操作。我理解错误但我想问有没有办法可以执行这些计算? I provided a sample image of my dataset

    number  id    location timearriving timeleaving       timeA               timeL         person   late
1  214980 900264  1001.18         NULL        NULL 2016-09-15 10:00:00 2016-09-15 12:00:00 Teacher
2  215708 900264  1001.18     07:55:06    09:59:58 2016-09-22 10:00:00 2016-09-22 12:00:00 Teacher
3  216388 900264  1001.18     08:00:22    09:54:06 2016-09-29 10:00:00 2016-09-29 12:00:00 Teacher
4  217106 900264  1001.18     08:40:15    09:53:07 2016-10-05 10:00:00 2016-10-05 12:00:00 Teacher
5  217250 900264  1001.18     08:03:47    09:52:59 2016-10-06 10:00:00 2016-10-06 12:00:00 Teacher
6  217808 900264  1001.18         NULL        NULL 2016-10-12 10:00:00 2016-10-12 12:00:00 Teacher
7  217952 900264  1001.18     08:01:44    09:51:45 2016-10-13 10:00:00 2016-10-13 12:00:00 Teacher
8  218640 900264  1001.18     08:04:04    09:57:24 2016-10-19 10:00:00 2016-10-19 12:00:00 Teacher
9  218788 900264  1001.18     07:59:52    09:50:17 2016-10-20 10:00:00 2016-10-20 12:00:00 Teacher
10 219397 900264  1001.18     08:01:06    09:51:05 2016-10-26 10:00:00 2016-10-26 12:00:00 Teacher
11 219541 900264  1001.18     08:05:29    09:56:04 2016-10-27 10:00:00 2016-10-27 12:00:00 Teacher
12 220273 900264  1001.18     08:09:20    09:57:46 2016-11-02 09:00:00 2016-11-02 11:00:00 Teacher
13 220419 900264  1001.18     08:09:05    09:59:53 2016-11-03 09:00:00 2016-11-03 11:00:00 Teacher

在这里,我添加了一个名为“late”的新列。 我想减去TimeA- timearriving 我使用此代码完成了此操作:

dataset["late"] <- NA
dataset$late <- dataset$timeA - dataset$timearriving

然后错误是:

  

unclass(e1)中的错误 - e2:二元运算符的非数字参数

现在我试着像你说的那样转换它们: timeA&lt; - ymd_hms(timeA)

  

timearriving&lt; - hms(timearriving)   警告信息:   在.parse_hms(...,order =“HMS”,quiet = quiet):     有些字符串无法解析

1 个答案:

答案 0 :(得分:3)

由于您没有提供可重复的示例,我将说明为每个变量使用一个值,例如:

library(lubridate)
timeleaving <- hms("09:59:33")
timeA <- ymd_hms("2017-02-16 10:00:00")

您可以使用:

timeleaving <- ymd_hms(paste(floor_date(timeA, "days"), timeleaving))
dif <- timeA -timeleaving  

Time difference of 27 secs

自从数据添加到原始问题后编辑:

data$timeleaving <- hms(data$timeleaving)
data$timearriving <- hms(data$timearriving)

data$timeA <- ymd_hms(data$timeA )
data$timeL <- ymd_hms(data$timeL )  

data$timeleaving <- ymd_hms(paste(floor_date(data$timeL, "days"), data$timeleaving))
data$timearriving <- ymd_hms(paste(floor_date(data$timeA, "days"), data$timearriving))
data$late <- data$timeA - data$timearriving