2017-08-28 88 views
0

我有与亚秒时间解析数据

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计算我的数据在格式中所经过的总秒数?如果不是,将数据转换为适当格式的最佳方式是什么?

我想过转换为字符,只是拼接出分钟和秒。

回答

1
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" 
0

也许下面会做到这一点。

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

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

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

*的format参数传递给strptime和...

每个输入的字符串根据需要对指定的格式进行处理:任何结尾字符均为忽略编辑。 [...] 请注意,%S不会读取输出中的小数部分。


或者说,最有可能更快,substr

as.integer(substr(x, 1, 2)) * 60 + as.integer(substr(x, 4, 5)) 
# [1] 69 634