Так же, как этот ваш вопрос мы можем использовать dplyr
, lubridate::seconds_to_period
и base::difftime
для получения вывода.
library(dplyr)
library(lubridate)
df1 %>%
mutate(dur = seconds_to_period(as.numeric(difftime(tpep_dropoff_datetime,
tpep_pickup_datetime),
units = "secs")))
#> # A tibble: 4 x 3
#> tpep_pickup_datetime tpep_dropoff_datetime dur
#> <dttm> <dttm> <Period>
#> 1 2015-01-15 18:05:39 2015-01-15 18:23:42 18M 3S
#> 2 2015-01-10 19:33:38 2015-01-10 19:53:28 19M 50S
#> 3 2015-01-10 19:33:38 2015-01-10 19:43:41 10M 3S
#> 4 2015-01-10 19:33:39 2015-01-10 19:35:31 1M 52S
Если вы хотите, чтобы вывод в secs
а не as.period
, тогда код ниже работает.
library(dplyr)
df1 %>%
mutate(dur = as.numeric(difftime(tpep_dropoff_datetime,
tpep_pickup_datetime),
units = "secs"))
#> # A tibble: 4 x 3
#> tpep_pickup_datetime tpep_dropoff_datetime dur
#> <dttm> <dttm> <dbl>
#> 1 2015-01-15 18:05:39 2015-01-15 18:23:42 1083
#> 2 2015-01-10 19:33:38 2015-01-10 19:53:28 1190
#> 3 2015-01-10 19:33:38 2015-01-10 19:43:41 603
#> 4 2015-01-10 19:33:39 2015-01-10 19:35:31 112
Данные:
read.table(text="tpep_pickup_datetime tpep_dropoff_datetime
2015-01-15_18:05:39 2015-01-15_18:23:42
2015-01-10_19:33:38 2015-01-10_19:53:28
2015-01-10_19:33:38 2015-01-10_19:43:41
2015-01-10_19:33:39 2015-01-10_19:35:31", stringsAsFactors=F, header=T) -> df1
df1 %>%
mutate_at(vars("tpep_pickup_datetime", "tpep_dropoff_datetime"),
list(~as.POSIXct(.,format="%Y-%m-%d_%H:%M:%S",tz=Sys.timezone()))) %>%
as_tibble -> df1
df1 #just to show the data
#> tpep_pickup_datetime tpep_dropoff_datetime
#> <dttm> <dttm>
#> 1 2015-01-15 18:05:39 2015-01-15 18:23:42
#> 2 2015-01-10 19:33:38 2015-01-10 19:53:28
#> 3 2015-01-10 19:33:38 2015-01-10 19:43:41
#> 4 2015-01-10 19:33:39 2015-01-10 19:35:31