将 Dataframe 中的数字列转换为时间格式

k3bvogb1  于 2023-05-26  发布在  其他
关注(0)|答案(2)|浏览(175)

我有一个dataframe包含2列,包括小时和分钟。我想将这些列转换为时间格式。数据如下:

dep_time    sched-dep-time
413         300
516         833
2344        1700
644         2230
1233        1800

我想得到:

dep_time    sched-dep-time
04:13       03:00
05:16       08:33
23:44       17:00
06:44       22:30
12:33       18:00
xpcnnkqh

xpcnnkqh1#

这里有一个解决方案:

time <- data.frame(c('413','516','2344','644','1233'), c('300','833','1700','2230','1800'))
colnames(time) <- c("dep_time", "sched-dep-time")

x1 <- as.vector(time[,1])
x2 <- as.vector(time[,2])

mins  <-  substr(x1, nchar(x1)-1, nchar(x1))
hour  <-  substr(x1, 0, nchar(x1)-2)
time[,1]  <-  paste0(hour, ':', mins)

mins  <-  substr(x2, nchar(x2)-1, nchar(x2))
hour  <-  substr(x2, 0, nchar(x2)-2)
time[,2]  <-  paste0(hour, ':', mins)

结果:

dep_time sched-dep-time
1     4:13           3:00
2     5:16           8:33
3    23:44          17:00
4     6:44          22:30
5    12:33          18:00
gcmastyq

gcmastyq2#

现在,我发布一个答案,直到我找到合适的傻瓜:

as.data.frame(sapply( x, function(y)  
                         substr(as.POSIXct(sprintf("%04.0f", y), format='%H%M'), 12, 16)))

# dep_time sched.dep.time
# 1    04:13          03:00
# 2    05:16          08:33
# 3    23:44          17:00
# 4    06:44          22:30
# 5    12:33          18:00

数据:

x <- read.table(text="dep_time    sched-dep-time
413         300
516         833
2344        1700
644         2230
1233        1800", header=T)

相关问题