конвертировать однозначный день в R - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть даты в формате Apr42016, Aug12017, Apr112018. Я пытаюсь конвертировать в Y / m / d, используя R. Я пробовал коды ниже, но когда у меня есть одна цифра за день, он вернул NA. Кто-нибудь может мне помочь, пожалуйста?

strptime(data$date, "%b%e%Y")
as.Date (data$date, format="%b%d%Y")
as.POSIXct(data$date, format="%b%e%Y")

Спасибо

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Вы можете изменить строки с помощью sub (и добавить 0 при необходимости) перед использованием as.Date:

myvec <- c("Apr42016", "Aug12017", "Apr112018")  # the data

myvec2 <- sub("(?<=[^0])(?=[0-9]{5})", "0", myvec, perl = TRUE)
# [1] "Apr042016" "Aug012017" "Apr112018"

as.Date(myvec2, format = "%b%d%Y")
# [1] "2016-04-04" "2017-08-01" "2018-04-11"
0 голосов
/ 13 ноября 2018

Если вы можете разбить числа до as.Date, это будет намного проще. (Заимствуя Свена за спиной.)

sub("(?<=\\D)(\\d+)(\\d{4})$", "-\\1-\\2",
  c("Apr42016", "Aug12017", "Apr112018"), perl=TRUE)
# [1] "Apr-4-2016"  "Aug-1-2017"  "Apr-11-2018"

Отсюда формат должен быть довольно простым:

as.Date(sub("(?<=\\D)(\\d+)(\\d{4})$", "-\\1-\\2", c("Apr42016", "Aug12017", "Apr112018"), perl = TRUE),
        format="%b-%d-%Y")
# [1] "2016-04-04" "2017-08-01" "2018-04-11"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...