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計算我的數據在格式中所經過的總秒數?如果不是,將數據轉換爲適當格式的最佳方式是什麼?
我想過轉換爲字符,只是拼接出分鐘和秒。
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計算我的數據在格式中所經過的總秒數?如果不是,將數據轉換爲適當格式的最佳方式是什麼?
我想過轉換爲字符,只是拼接出分鐘和秒。
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"
也許下面會做到這一點。
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
您可以使用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