在R中将小时转换为秒

时间:2014-10-06 01:41:05

标签: r

我有数小时格式的数据,需要把所有内容都变成秒。任何人都可以帮助我吗?

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 个答案:

答案 0 :(得分: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

答案 1 :(得分: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