将文本文件导入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)
答案 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)
我们可以使用sprintf
和strptime
/ 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.delim
是read.table
的快捷方式,它设置了一些默认值,并将colClasses
之类的任何其他参数直接传递给read.table