Я пытаюсь отформатировать временную переменную, однако некоторые из временных меток имеют только 5 цифр вместо 6, где час <10, т.е. 82049. Я хочу пройти через столбец переменной, а где есть только 5 цифр, я хочу вставить 0 впереди, поэтому я получаю 082049 (ЧЧММСС, а не ЧММСС). Я пробовал применять операторы ifelse, но не могу заставить их проходить каждую строку.

  > dat$Time <- c(82049,82059,82109,82119,82129,82139,82149,82159,82209,82219,112359,112409,112419,112429,112439,112449,112459,112509,112519,112529,112539)
r
1
helen.h 2 Сен 2020 в 18:57

2 ответа

Лучший ответ

Еще один способ, которым вы можете попробовать

library(dplyr)
library(stringr)
dat %>% 
  mutate(time1 = ifelse(stri_length(time1) == 5, paste0("0", time1), time1),
         time2 = gsub("(\\d{2})(?=\\d{2})", "\\1:", time1, perl = TRUE))

# time1    time2
# 1  082049 08:20:49
# 2  082059 08:20:59
# 3  082109 08:21:09
# 4  082119 08:21:19
# 5  082129 08:21:29
# 6  082139 08:21:39
# 7  082149 08:21:49
# 8  082159 08:21:59
# 9  082209 08:22:09
# 10 082219 08:22:19
# 11 112359 11:23:59
# 12 112409 11:24:09
# 13 112419 11:24:19
# 14 112429 11:24:29
# 15 112439 11:24:39
# 16 112449 11:24:49
# 17 112459 11:24:59
# 18 112509 11:25:09
# 19 112519 11:25:19
# 20 112529 11:25:29
# 21 112539 11:25:39

Данные

dat <- data.frame(time1 = c(82049,82059,82109,82119,82129,82139,82149,82159,82209,82219,112359,112409,112419,112429,112439,112449,112459,112509,112519,112529,112539))
1
Tho Vu 2 Сен 2020 в 17:45

Используя sprintf.

r <- sprintf("%06d", v)
r
# [1] "082049" "082059" "082109" "082119" "082129" "082139"
# [7] "082149" "082159" "082209" "082219" "112359" "112409"
# [13] "112419" "112429" "112439" "112449" "112459" "112509"
# [19] "112519" "112529" "112539"

Чтобы наконец получить строки времени, вы можете сделать

f <- Vectorize(function(x) {
  s <- el(strsplit(x, ""))
  paste0(s[1], s[2], ":", s[3], s[4], ":", s[5], s[6])
  }, USE.NAMES=F)

f(r)
# [1] "08:20:49" "08:20:59" "08:21:09" "08:21:19" "08:21:29"
# [6] "08:21:39" "08:21:49" "08:21:59" "08:22:09" "08:22:19"
# [11] "11:23:59" "11:24:09" "11:24:19" "11:24:29" "11:24:39"
# [16] "11:24:49" "11:24:59" "11:25:09" "11:25:19" "11:25:29"
# [21] "11:25:39"

< EM> Данные:

v <- c(82049, 82059, 82109, 82119, 82129, 82139, 82149, 82159, 82209, 
82219, 112359, 112409, 112419, 112429, 112439, 112449, 112459, 
112509, 112519, 112529, 112539)
1
jay.sf 2 Сен 2020 в 16:35