#r #string #date #format
#r #строка #Дата #форматировать
Вопрос:
У меня есть вектор даты, подобный этому
date <- c("01jan2020", "04mar2020", "20dec2020")
и я хочу отделить его с помощью — следуя следующему шаблону (после первых 2 цифр и после первых 5 цифр):
date_transform1 <- c("01-jan-2020", "04-mar-2020", "20-dec-2020")
Затем я хочу преобразовать первую букву месяца в заглавную букву:
date_transform2 <- c("01-Jan-2020", "04-Mar-2020", "20-Dec-2020")
Есть какие-нибудь подсказки?
С уважением
Ответ №1:
Опция с lubridate
и format
library(lubridate)
format(dmy(date), "%d-%b-%Y")
#[1] "01-Jan-2020" "04-Mar-2020" "20-Dec-2020"
Ответ №2:
Вы можете попробовать этот подход, разделив свою текстовую цепочку на несколько компонентов:
#Data
date <- c("01jan2020", "04mar2020", "20dec2020")
#Extract first element
x1 <- substr(gsub("[^0-9.-]", "", date),1,2)
#Extract second element
x2 <- substr(gsub("[^0-9.-]", "", date),nchar(gsub("[^0-9.-]", "", date))-3,
nchar(gsub("[^0-9.-]", "", date)))
#Format month
x3 <- gsub('[[:digit:]] ', '', date)
x3 <- paste(toupper(substr(x3, 1, 1)), substr(x3, 2, nchar(x3)), sep="")
#Now concatenate
xf <- paste0(x1,'-',x3,'-',x2)
Вывод:
[1] "01-Jan-2020" "04-Mar-2020" "20-Dec-2020"
Ответ №3:
Вы можете преобразовать character
объект в Date
и изменить его формат.
format(as.Date(date, "%d%b%Y"), "%d-%b-%Y")
# [1] "01-Jan-2020" "04-Mar-2020" "20-Dec-2020"
Первые буквы месяцев будут преобразованы в заглавные. Вы также можете использовать dmy()
from lubridate
или anydate()
from anytime
для разбора Date
объектов.
format(lubridate::dmy(date), "%d-%b-%Y")
format(anytime::anydate(date), "%d-%b-%Y")
Другой вариант с stringr
пакетом:
library(stringr)
str_replace(date, "[a-z] ", function(x) sprintf("-%s-", str_to_title(x)))
# [1] "01-Jan-2020" "04-Mar-2020" "20-Dec-2020"
или
str_replace(date, "[a-z] ", function(x) str_pad(str_to_title(x), 5, "both", "-"))
# [1] "01-Jan-2020" "04-Mar-2020" "20-Dec-2020"
Комментарии:
1. Суперэффективно. Спасибо
2. Вы правы, что ваш пришел первым. Однако я обнаружил, что код @akrun более интуитивно понятен и лучше вписывается в мой код и в структуру «dplyr» (по крайней мере, таково мое восприятие, когда я попробовал два кода). Ваш вклад был очень ценным для меня, и я действительно ценю это. Еще раз спасибо