如何在时间数据中分离“:”

时间:2013-08-05 17:15:38

标签: r

我在数据库中有一个时间列,其中小时和分钟用“:”分隔。我想删除“:”,以便时间字段变为数字,因为我将使用数字时间进行某些计算。

输入: X 00:00 01:15 02:30

输出: X 0000 0115 0230

我是R.的新手。如果这是一个愚蠢的问题,我道歉。非常感谢任何帮助。谢谢。

3 个答案:

答案 0 :(得分:3)

> x <- c("00:00", "01:15", "02:30")
> gsub(":", "", x)
[1] "0000" "0115" "0230"

如果你真的想要数字,你可以强迫numericinteger

> as.numeric(gsub(":", "", x))
[1]   0 115 230

答案 1 :(得分:2)

GSee的回答符合您的要求。但是,如果你用时间单位做算术,你可能会考虑一些更简单的方法。

library(lubridate)
X <- hm(c("00:00", "01:15", "02:30")) # Converts to lubridate time objects

X + minutes(1)
# [1] "1M 0S"     "1H 16M 0S" "2H 31M 0S"

X + weeks(2)
# [1] "14d 0H 0M 0S"  "14d 1H 15M 0S" "14d 2H 30M 0S"

答案 2 :(得分:2)

使用R工具进行时间分析以首先转换为日期时间可能更为明智。目前,您无法捕获“时间”值的非小数字符。 300-259应该是1而不是41.这组命令说明了R的日期时间和日期功能:

> X <- c('00:00', '01:15', '02:30')
> as.POSIXct(X, format="%H:%M")
[1] "2013-08-05 00:00:00 PDT" "2013-08-05 01:15:00 PDT" "2013-08-05 02:30:00 PDT"

这将给出与今天午夜相差几秒的结果:

> as.numeric(as.POSIXct(X, format="%H:%M") - as.POSIXct("2013-08-05 00:00:00 PDT"))
[1]    0 4500 9000

现在尝试使用今天的日期,但是注意到有7个小时的偏移,因为as.POSIXct将假设这是GMT.UCT时间:

> as.numeric(as.POSIXct(X, format="%H:%M") - as.POSIXct(Sys.Date()))
[1] 7.00 8.25 9.50
> as.numeric(as.POSIXct(X, format="%H:%M") - (as.POSIXct(Sys.Date())+7*3600))
[1]    0 4500 9000

因此,通过改变7小时(= 7 * 3600秒)然后转换为分钟来完成该过程:

> as.numeric(as.POSIXct(X, format="%H:%M") - (as.POSIXct(Sys.Date())+7*3600))/60
[1]   0  75 150