R 将(格式)时钟时间从H:MM转换为HH:MM

R 将(格式)时钟时间从H:MM转换为HH:MM,r,datetime,formatting,tidyverse,R,Datetime,Formatting,Tidyverse,时间列混合了H:MM和HH:MM,如下所示: TIME 4:08 6:12 8:15 10:15 14:16 16:55 我想将所有时钟时间的格式设置为HH:MM格式,如下所示(即:当时间为H:MM时加零) 将它们视为字符串,可以使用paste0,即 d1$TIME[nchar(sub(':.*', '', d1$TIME)) == 1] <- paste0('0', d1$TIME[nchar(sub(':.*', '', d1$TIME)) == 1]) 数据 dput(d1) s

时间列混合了
H:MM
HH:MM
,如下所示:

TIME
4:08
6:12
8:15
10:15
14:16
16:55
我想将所有时钟时间的格式设置为
HH:MM
格式,如下所示(即:当时间为
H:MM
时加零)


将它们视为字符串,可以使用
paste0
,即

d1$TIME[nchar(sub(':.*', '', d1$TIME)) == 1] <- paste0('0', d1$TIME[nchar(sub(':.*', '', d1$TIME)) == 1])
数据

dput(d1)
structure(list(TIME = structure(c(4L, 5L, 6L, 1L, 2L, 3L), .Label = c("10:15", 
"14:16", "16:55", "4:08", "6:12", "8:15"), class = "factor")), class = "data.frame", row.names = c(NA, 
-6L))

将它们视为字符串,可以使用
paste0
,即

d1$TIME[nchar(sub(':.*', '', d1$TIME)) == 1] <- paste0('0', d1$TIME[nchar(sub(':.*', '', d1$TIME)) == 1])
数据

dput(d1)
structure(list(TIME = structure(c(4L, 5L, 6L, 1L, 2L, 3L), .Label = c("10:15", 
"14:16", "16:55", "4:08", "6:12", "8:15"), class = "factor")), class = "data.frame", row.names = c(NA, 
-6L))
Input=('TIME
4:08
6:12
8:15
10:15
14:16
16:55')
df=read.table(textConnection(输入),header=T,stringsAsFactors=F)
df$TIME
Input=('TIME
4:08
6:12
8:15
10:15
14:16
16:55')
df=read.table(textConnection(输入),header=T,stringsAsFactors=F)

df$TIME一个基本R选项是使用
regmatches
+
sprintf
,即

d <- `class<-`(do.call(rbind,with(df,regmatches(TIME,gregexpr("\\d+",TIME)))),"numeric")
df$TIME_new <- sprintf("%02i:%02i",d[,1],d[,2])

一个基本R选项是使用
regmatches
+
sprintf
,即

d <- `class<-`(do.call(rbind,with(df,regmatches(TIME,gregexpr("\\d+",TIME)))),"numeric")
df$TIME_new <- sprintf("%02i:%02i",d[,1],d[,2])
使用
strtime
(或
as.POSIXct
)读取日期-时间对象,并使用
format
(或
strftime
)提取时间部分

format(strptime(df$TIME, "%H:%M"), "%H:%M")

# [1] "04:08" "06:12" "08:15" "10:15" "14:16" "16:55"
使用
strtime
(或
as.POSIXct
)读取日期-时间对象,并使用
format
(或
strftime
)提取时间部分

format(strptime(df$TIME, "%H:%M"), "%H:%M")

# [1] "04:08" "06:12" "08:15" "10:15" "14:16" "16:55"

正如你所说,你有一个时间列,我假设你有一个数据帧。在本例中,我将您的数据放入一个数据框中,并将您想要的时间转换为两个新列来处理它:一个是
character
,另一个是
time
,因为您没有指定想要结果的格式。简单解释一下,
%R
相当于
%H:%M

库(tidyverse)
图书馆(hms)
数据帧(ID=c(1L,2L,3L,4L,5L,6L),
时间=c(“4:08”、“6:12”、“8:15”、“10:15”、“14:16”、“16:55”),
stringsAsFactors=F)%>%
不稳定(%)%>%
mutate(TIME2=格式(strtime(TIME,“%R”),“%R”),
TIME3=as_hms(as.POSIXct(TIME,format=“%R”))
#>#tibble:6 x 4
#>ID时间时间2时间3
#>      
#> 1     1 4:08  04:08 04:08 
#> 2     2 6:12  06:12 06:12 
#> 3     3 8:15  08:15 08:15 
#> 4     4 10:15 10:15 10:15 
#> 5     5 14:16 14:16 14:16 
#> 6     6 16:55 16:55 16:55

由(v0.3.0)于2020年2月24日创建。

正如您所说,您有一个带有时间的列,我假设您有一个数据帧。在本例中,我将您的数据放入一个数据框中,并将您想要的时间转换为两个新列来处理它:一个是
character
,另一个是
time
,因为您没有指定想要结果的格式。简单解释一下,
%R
相当于
%H:%M

库(tidyverse)
图书馆(hms)
数据帧(ID=c(1L,2L,3L,4L,5L,6L),
时间=c(“4:08”、“6:12”、“8:15”、“10:15”、“14:16”、“16:55”),
stringsAsFactors=F)%>%
不稳定(%)%>%
mutate(TIME2=格式(strtime(TIME,“%R”),“%R”),
TIME3=as_hms(as.POSIXct(TIME,format=“%R”))
#>#tibble:6 x 4
#>ID时间时间2时间3
#>      
#> 1     1 4:08  04:08 04:08 
#> 2     2 6:12  06:12 06:12 
#> 3     3 8:15  08:15 08:15 
#> 4     4 10:15 10:15 10:15 
#> 5     5 14:16 14:16 14:16 
#> 6     6 16:55 16:55 16:55
由(v0.3.0)于2020年2月24日创建