在R中将数字转换为时间

时间:2015-10-14 06:36:38

标签: regex r

我的数据如下:

 > str(m)
     int [1:8407] 930 1050 1225 1415 1620 1840 820 1020 1215 1410 ...

这是以小时和分钟为单位的时间。我试图把它变成某种东西(9:30,12:10,16:40,8:25 ......)。

> m1 <- strptime(m, "%H%M")
> head(m1)
[1] NA                         "2015-10-14 10:50:00 VLAT"
[3] "2015-10-14 12:25:00 VLAT" "2015-10-14 14:15:00 VLAT"
[5] "2015-10-14 16:20:00 VLAT" "2015-10-14 18:40:00 VLAT"
> str(m1)
 POSIXlt[1:8407], format: NA "2015-10-14 10:50:00" "2015-10-14 12:25:00" ...

如何及时转换一组数字?

3 个答案:

答案 0 :(得分:1)

使用正则表达式:

sub("(\\d{2})$", ":\\1", x)
 #[1] "9:30"  "10:50" "12:25" "14:15" "16:20" "18:40" "8:20" 
 #[8] "10:20" "12:15" "14:10"

在最后两位数字上进行匹配,并在其前面添加冒号。

数据

x <- c(930, 1050, 1225, 1415, 1620, 1840, 820, 1020, 1215, 1410)

答案 1 :(得分:0)

我们使用sprintf格式化数字以填充3位数字的前导0,使用strptime然后使用format获取小时和分钟。

format(strptime(sprintf('%04d', v1), format='%H%M'), '%H:%M')
#[1] "09:30" "10:50" "12:25"

或另一种选择是

sub('(\\d{2})$', ':\\1', v1)
#[1] "9:30"  "10:50" "12:25"

数据

v1 <- c(930, 1050,1225)

答案 2 :(得分:0)

另一种方式是,

x <- c(645, 1234,2130)
substr(as.POSIXct(sprintf("%04.0f", x), format='%H%M'), 12, 16)

#[1] "06:45" "12:34" "21:30"