Вставить двоеточие в отметку времени ччммсс

Я новичок в программировании stackoverflow и R.

Предположим, у меня есть следующие данные:

time<-as.factor(c(142250,101449,85829))
as.data.frame(time)

Это вернет следующее:

    time
  1 142250
  2 101449
  3  85829

Я хочу преобразовать приведенное выше в метки времени с точкой с запятой, например:

142250 будет 14:22:50

Мне удалось найти следующий код с помощью пакета chron:

library('chron')
times(gsub("(..)(..)(..)", "\\1:\\2:\\3", date))

который возвращает

[1] 14:22:50 10:14:49 **<NA>**  

Как вы можете видеть, проблема в том, что если меньше 6 символов, он вернет NA.

Результат, который я получаю, должен вернуть следующие результаты:

[1] 14:22:50 10:14:49 8:58:29  

Я считаю, что мне, возможно, придется сделать какой-то цикл, но я не уверен, как это сделать?

Любая помощь будет высоко ценится.


person WinteR    schedule 10.11.2014    source источник
comment
Итак, 11111 гарантированно будет 01:11:11, а не 11:01:11 или 11:11:01?   -  person Roland    schedule 10.11.2014
comment
Да это верно! спасибо, что указали на это   -  person WinteR    schedule 11.11.2014


Ответы (2)


Таким образом, чтобы достичь желаемого результата, вы можете использовать sprintf и добавить 0 в начале, если строка короче 6, хотя см. комментарий @Rolands и, пожалуйста, предоставьте больше ясности.

library('chron')
time <- sprintf("%06d", as.numeric(as.character(time)))
times(gsub("(..)(..)(..)", "\\1:\\2:\\3", time))
## [1] 14:22:50 10:14:49 08:58:29
person David Arenburg    schedule 10.11.2014
comment
Привет Дэвид, Это сработало отлично! спасибо! я не знал о функции «sprintf» :) - person WinteR; 11.11.2014

У меня возникло бы искушение избегать регулярных выражений и просто использовать substring.

time <- sprintf("%06d", as.numeric(as.character(time)))
paste(
  substring(time, 1, 2), 
  substring(time, 3, 4), 
  substring(time, 5, 6), 
  sep = ":"
)
person Richie Cotton    schedule 10.11.2014