在没有额外日期信息的情况下,我在data.frame中使用分和秒两列的时间信息,现在我想计算这两列之间的差异,并在任何秒(diff_time1)中为diff_time (end_ time -start_time)获得一个新列(diff_time1),或者以分钟和秒为单位(在原始的diff_time中表示)--如何在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
发布于 2017-04-24 04:56:25
假设您的时间存储为字符串,在这种情况下,表示秒的引号必须转义:
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
的结果作为字符串进行,则需要执行一些额外的文本转换:
library(lubridate)
library(dplyr)
times %>%
mutate(diff_time1 = ms(end_time) - ms(start_time)) %>%
mutate(diff_time2 = as.numeric(diff_time1)) %>%
mutate(diff_time1 = gsub("M ", "'", diff_time1)) %>%
mutate(diff_time1 = gsub("S", "\"", diff_time1))
start_time end_time diff_time1 diff_time2
1 12'10" 16'23" 4'13" 253
2 1'05" 76'20" 75'15" 4515
3 96'10" 120'22" 24'12" 1452
发布于 2017-04-24 05:04:08
您可以分别存储分钟和秒,并将它们存储为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
https://stackoverflow.com/questions/43579840
复制相似问题