如何获得分钟和秒的时差?

时间:2017-04-24 04:29:44

标签: r time

我有两列时间信息,在data.frame中使用分钟和秒,没有额外的日期信息,现在我想计算这两列之间的差异,并获得 diff_time 的新列( end_time-start_time)以秒为单位( diff_time1 )或以原始变量( diff_time2 )表示的分钟和秒数,如何在R中计算? 例如:

      start_time  end_time  diff_time1  diff_time2
       12'10"     16'23"      4'13"      253
       1'05"      76'20"      75'15"     4515  
       96'10"     120'22"     24'12"     1452

2 个答案:

答案 0 :(得分:6)

假设您的时间存储为字符串,在这种情况下,必须转义表示秒的引号:

MCVE

然后您可以使用times <- data.frame(start_time = c("12'10\"", "1'05\"", "96'10\""), end_time = c("16'23\"", "76'20\"", "120'22\"") ) 转换为分钟+秒并进行计算。如果您希望将lubridate::ms的结果作为字符串,则需要进行一些额外的文字转换:

diff_time1

答案 1 :(得分:0)

您可以将分钟和秒分开存储并将其存储为difftime个对象,可以添加和减去这些对象:

library(tidyverse)

df <- structure(list(start_time = c("12'10\"", "1'05\"", "96'10\""), 
    end_time = c("16'23\"", "76'20\"", "120'22\"")), class = "data.frame", row.names = c(NA, 
-3L), .Names = c("start_time", "end_time"))

df %>% 
    separate(start_time, c('start_min', 'start_sec'), convert = TRUE, extra = 'drop') %>% 
    separate(end_time, c('end_min', 'end_sec'), convert = TRUE, extra = 'drop') %>%
    mutate(start = as.difftime(start_min, units = 'mins') + as.difftime(start_sec, units = 'secs'), 
           end = as.difftime(end_min, units = 'mins') + as.difftime(end_sec, units = 'secs'),
           diff_time = end - start)

#>   start_min start_sec end_min end_sec     start       end diff_time
#> 1        12        10      16      23  730 secs  983 secs  253 secs
#> 2         1         5      76      20   65 secs 4580 secs 4515 secs
#> 3        96        10     120      22 5770 secs 7222 secs 1452 secs