2014-10-06 117 views
-5

我有小時格式的數據,需要將所有內容都轉換爲秒。誰能幫我 ?將小時轉換爲秒數

2:00:00 3:00:00 6:00:00 4:00:00 4:00:00 3:00:48 1:00:00 3:00:00 2:00:00 4:00:00 1:30:00 2:00:00 1:00:00 3:00:00 4:00:00 4:30:00 5:00:00

+2

1Hr = 3600sec! – chouaib 2014-10-06 01:43:23

+0

我知道。但是我需要在R – 2014-10-06 01:53:05

+0

的一堆數據中爲所有小時做這件事。如果有人有另一種想法,請在那裏發帖 – 2014-10-06 02:09:30

回答

3
# Read the data in 
x <- unlist(strsplit("2:00:00 3:00:00 6:00:00 4:00:00 4:00:00 3:00:48 1:00:00 3:00:00 2:00:00 4:00:00 1:30:00 2:00:00 1:00:00 3:00:00 4:00:00 4:30:00 5:00:00", "[[:space:]]+")) 
x 
# [1] "2:00:00" "3:00:00" "6:00:00" "4:00:00" "4:00:00" "3:00:48" "1:00:00" 
# [8] "3:00:00" "2:00:00" "4:00:00" "1:30:00" "2:00:00" "1:00:00" "3:00:00" 
#[15] "4:00:00" "4:30:00" "5:00:00" 

拆分每個字符串在:。將第一個數字乘以3600,第二個乘以60,最後乘以1.然後將它們相加。這可以通過矩陣乘法一步完成。

sapply(strsplit(x, ":"), function(n) as.numeric(n) %*% c(3600, 60, 1)) 
# [1] 7200 10800 21600 14400 14400 10848 3600 10800 7200 14400 5400 7200 
#[13] 3600 10800 14400 16200 18000 

或者,你可以在時間從它們轉換爲正確POSIXct對象和減去午夜拿到秒

as.numeric(strptime(x, format="%H:%M:%S") - as.POSIXct(format(Sys.Date())), units="secs") 
# [1] 7200 10800 21600 14400 14400 10848 3600 10800 7200 14400 5400 7200 
#[13] 3600 10800 14400 16200 18000 
+0

謝謝! – 2014-10-06 02:04:18

1

qdapTools庫具有hms2sec功能做到這一點數:

x <- unlist(strsplit("2:00:00 3:00:00 6:00:00 4:00:00 4:00:00 3:00:48 1:00:00 3:00:00 2:00:00 4:00:00 1:30:00 2:00:00 1:00:00 3:00:00 4:00:00 4:30:00 5:00:00", "[[:space:]]+")) 
x 

library(qdapTools) 
hms2sec(x) 

## [1] 7200 10800 21600 14400 14400 10848 3600 10800 7200 
## [10] 14400 5400 7200 3600 10800 14400 16200 18000