我在数据库中有一个时间列,其中小时和分钟用“:”分隔。我想删除“:”,以便时间字段变为数字,因为我将使用数字时间进行某些计算。
输入: X 00:00 01:15 02:30
输出: X 0000 0115 0230
我是R.的新手。如果这是一个愚蠢的问题,我道歉。非常感谢任何帮助。谢谢。
答案 0 :(得分:3)
> x <- c("00:00", "01:15", "02:30")
> gsub(":", "", x)
[1] "0000" "0115" "0230"
如果你真的想要数字,你可以强迫numeric
或integer
> 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