在 dplyr 中,
library(dplyr)
# parse datetimes
df %>% mutate_all(as.POSIXct, format = '%b %d %Y %I:%M%p') %>%
# add column with time difference
mutate(elapsed = TimeEnd - TimeStart)
## TimeStart TimeEnd elapsed
## 1 2016-05-01 01:00:00 2016-05-01 01:28:00 28 mins
## 2 2016-05-01 01:01:00 2016-05-01 01:21:00 20 mins
## 3 2016-05-01 13:00:00 2016-05-01 13:13:00 13 mins
## 4 2016-05-01 13:00:00 2016-05-04 17:42:00 4602 mins
## 5 2016-05-01 13:02:00 2016-05-01 13:37:00 35 mins
## 6 2016-05-01 13:02:00 2016-05-01 13:14:00 12 mins
## 7 2016-05-01 13:02:00 2016-05-01 13:39:00 37 mins
## 8 2016-05-01 13:02:00 2016-05-01 13:18:00 16 mins
或等价于基础 R,
df$TimeStart <- as.POSIXct(df$TimeStart, format = '%b %d %Y %I:%M%p')
df$TimeEnd <- as.POSIXct(df$TimeEnd, format = '%b %d %Y %I:%M%p')
df$elapsed <- df$TimeEnd - df$TimeStart
df
## TimeStart TimeEnd elapsed
## 1 2016-05-01 01:00:00 2016-05-01 01:28:00 28 mins
## 2 2016-05-01 01:01:00 2016-05-01 01:21:00 20 mins
## 3 2016-05-01 13:00:00 2016-05-01 13:13:00 13 mins
## 4 2016-05-01 13:00:00 2016-05-04 17:42:00 4602 mins
## 5 2016-05-01 13:02:00 2016-05-01 13:37:00 35 mins
## 6 2016-05-01 13:02:00 2016-05-01 13:14:00 12 mins
## 7 2016-05-01 13:02:00 2016-05-01 13:39:00 37 mins
## 8 2016-05-01 13:02:00 2016-05-01 13:18:00 16 mins
数据
df <- structure(list(TimeStart = c("May 1 2016 1:00AM", "May 1 2016 1:01AM",
"May 1 2016 1:00PM", "May 1 2016 1:00PM", "May 1 2016 1:02PM",
"May 1 2016 1:02PM", "May 1 2016 1:02PM", "May 1 2016 1:02PM"
), TimeEnd = c("May 1 2016 1:28AM", "May 1 2016 1:21AM", "May 1 2016 1:13PM",
"May 4 2016 5:42PM", "May 1 2016 1:37PM", "May 1 2016 1:14PM",
"May 1 2016 1:39PM", "May 1 2016 1:18PM")), class = "data.frame", row.names = c(NA,
-8L), .Names = c("TimeStart", "TimeEnd"))