我有两列时间信息,在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
答案 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