如何在R中将整数123033转换为时间12:30:33

时间:2019-05-23 08:46:16

标签: r dataframe

将文本文件导入R后,R在时间列中省略了“ 0”。

例如:

Before import time | After import time
077250             | 77250
000002             |     2

因此,无法转换为正确的时间格式。 (从77250到07:25:50)

如何将整数时间转换为正确的时间格式?

我尝试过:

chron (time, "%H:%M:%S")
strptime(time, "%H:%M:%S")
time <- as.hms(time)

3 个答案:

答案 0 :(得分:3)

您可以使用str_pad包中的stringr来还原零:

library(stringr)
time_old <- "2"
time_new <- str_pad(time_old, width = 6, side = "left", pad = 0)

然后,您应该可以使用chron函数:

chron::chron(times = time_new, format = list(times = "hms"),
             out.format = "h:m:s")
[1] 00:00:02

答案 1 :(得分:3)

我们可以使用sprintfstrptime / as.POSIXct

如果您已将它们读取为数字,请在%d中使用sprintf,如果它们是字符,则使用%s

x <- c(072550, 2)
format(strptime(sprintf("%06d", x), "%H%M%S"), "%T")
#[1] "07:25:50" "00:00:02"

x <- c("072550", "2")
format(strptime(sprintf("%06s", x), "%H%M%S"), "%T")
#[1] "07:25:50" "00:00:02"

答案 2 :(得分:1)

This possibly duplicate question显示了如何通过colClasses指定自己的格式化功能,从而以所需的格式直接读取数据:

setAs("character","myDate", function(from) as.Date(from, format="%Y%m%d") )
setAs("character","myTime", function(from) chron(times = from, format = "hms", out.format = "h:m:s"))

tmp <- c("1\t20080815\t072550", "2\t20100523\t000002")
con <- textConnection(tmp)

tmp2 <- read.delim(con, colClasses=c('numeric','myDate','myTime'), header=FALSE)

tmp2包含:

  V1         V2       V3
1  1 2008-08-15 07:25:50
2  2 2010-05-23 00:00:02

read.delimread.table的快捷方式,它设置了一些默认值,并将colClasses之类的任何其他参数直接传递给read.table