我有一列时间值,除了它们是字符格式并且没有用于分隔H,M,S的冒号.该列看起来类似于以下内容:
Time
024201
054722
213024
205022
205024
125440
Run Code Online (Sandbox Code Playgroud)
我想将列中的所有值转换为格式中的实际时间值H:M:S
.这些值已经是HMS
格式化的,所以它只是插入冒号的问题,但事实证明这比我想象的要困难.我找到了一个从右边每三位数添加逗号的包,使字符串看起来像货币值,但没有时间(没有添加日期值,我不想这样做).任何帮助,将不胜感激.
由于数据与时间有关,因此应考虑将其存储为POSIX格式:
> df <- data.frame(Time=c("024201", "054722", "213024", "205022", "205024", "125440")
> df$Time <- as.POSIXct(df$Time, format="%H%M%S")
> df
Time
1 2014-01-05 02:42:01
2 2014-01-05 05:47:22
3 2014-01-05 21:30:24
4 2014-01-05 20:50:22
5 2014-01-05 20:50:24
6 2014-01-05 12:54:40
Run Code Online (Sandbox Code Playgroud)
只输出时间:
> format(df, "%H:%M:%S")
Time
1 02:42:01
2 05:47:22
3 21:30:24
4 20:50:22
5 20:50:24
6 12:54:40
Run Code Online (Sandbox Code Playgroud)
带有环视的正则表达式适用于此:
gsub('(..)(?=.)', '\\1:', x$Time, perl=TRUE)
Run Code Online (Sandbox Code Playgroud)
该(?=.)
装置的字符(通过匹配.
)必须遵循,但不被认为是匹配的部分(并且不捕获).