首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何得到时差与分钟和秒?

如何得到时差与分钟和秒?
EN

Stack Overflow用户
提问于 2017-04-24 04:29:43
回答 2查看 1.5K关注 0票数 4

在没有额外日期信息的情况下,我在data.frame中使用分和秒两列的时间信息,现在我想计算这两列之间的差异,并在任何秒(diff_time1)中为diff_time (end_ time -start_time)获得一个新列(diff_time1),或者以分钟和秒为单位(在原始的diff_time中表示)--如何在R中计算它?例如:

代码语言:javascript
运行
复制
      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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-24 04:56:25

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

代码语言:javascript
运行
复制
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的结果作为字符串进行,则需要执行一些额外的文本转换:

代码语言:javascript
运行
复制
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
票数 7
EN

Stack Overflow用户

发布于 2017-04-24 05:04:08

您可以分别存储分钟和秒,并将它们存储为difftime对象,这些对象可以添加和减去:

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43579840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档