0

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

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

输出:X 0000 0115 0230

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

4

3 回答 3

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

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

> as.numeric(gsub(":", "", x))
[1]   0 115 230
于 2013-08-05T17:17:08.003 回答
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"
于 2013-08-05T17:31:56.023 回答
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
于 2013-08-05T18:02:44.050 回答