首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用子秒解析时间数据

问用子秒解析时间数据
EN

Stack Overflow用户
提问于 2017-08-28 19:06:51
回答 3查看 235关注 0票数 0

我有一些时间数据

代码语言:javascript
复制
01:09:00
00:14:00
00:00:00
11:47:00
10:34:00
08:15:00

数据是用%M:%S:00测量的(第一个数字是分钟,第二个数字是秒)。我想把它转换成总秒数。这在lubridate中很容易实现,但是R一直认为格式是%H:%M:%S。

lubridate能计算出以我的数据的格式经过的总秒数吗?如果不是,如何将数据转换为适当的格式?

我曾想过要转换成角色,只需要剪接几分钟和几秒。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-08-28 19:32:29

代码语言:javascript
复制
library(lubridate)
foo = function(x){
    hms(sapply(strsplit(x, ":"), function(xx) paste("01", xx[1], xx[2], sep = ":")))
}
a = "01:09:00"
b = "00:14:00"
foo(a) - foo(b)
#[1] "1M -5S"

#OR
as.period(foo(a) - foo(b), unit = "secs")
#[1] "55S"
票数 1
EN

Stack Overflow用户

发布于 2017-08-28 19:34:14

也许以下几点就能做到。

代码语言:javascript
复制
NumSeconds <- function(x){
    f <- function(y)
        sum(sapply(strsplit(y, split=":"), as.numeric) * c(60, 1, 0))
    unname(sapply(x, f))
}

x <- scan(what = "character", text = "
01:09:00
00:14:00
00:00:00
11:47:00
10:34:00
08:15:00")

NumSeconds(x)
[1]  69  14   0 707 634 495
票数 0
EN

Stack Overflow用户

发布于 2017-08-28 19:38:45

您可以使用data.table::as.ITime并将格式指定为"%M:%S"*

代码语言:javascript
复制
x <- c("01:09:00", "10:34:00")
as.integer(as.ITime(x, format = "%M:%S"))
# [1]  69 634

* format参数传递给strptime和.

对于指定的格式,将尽可能处理每个输入字符串:忽略任何尾随字符。..。请注意,%S不读取输出的小数部分。

或者,最有可能更快,substr

代码语言:javascript
复制
as.integer(substr(x, 1, 2)) * 60 + as.integer(substr(x, 4, 5))
# [1]  69 634
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45925785

复制
相关文章

相似问题

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