У меня есть вектор символов, содержащий даты в формате "ГГГГ-ММ", например:
date_vec <- c("2020-01", "2020-02", "2020-03", "2020-04")
Я хочу преобразовать этот вектор в формат даты в R, но я хочу сохранить только информацию о годе и месяце без добавления какой-либо информации о дне месяца. В частности, я хочу, чтобы результирующие объекты Date имели формат "%Y-%m"
, а не "%Y-%m-%d"
.
Я пытался использовать функцию as.Date()
в R с аргументом формата, установленным на "%Y-%m"
, но, похоже, это возвращает NA
.
as.Date(date_vec, format = "%Y-%m")
#return NA NA NA NA
Любые мысли, пожалуйста?
Если вы хотите работать только с месяцами, вы можете использовать класс зоопарка yearmon
.
Обновлено: Упрощенный ответ благодаря предложению Г. Гротендика.
date_vec <- c("2020-01", "2020-02", "2020-03", "2020-04")
zoo::as.yearmon(date_vec)
[1] "Jan 2020" "Feb 2020" "Mar 2020" "Apr 2020"
Вероятно, лучше всего использовать library(zoo)
и опустить zoo::
перед as.yearmon
на случай, если будут дальнейшие вычисления с объектом yearmon, чтобы быть уверенным, что он сможет найти дополнительные методы yearmon. Например, если в новом экземпляре R мы напишем x <- zoo::as.yearmon("2000-01"); as.Date(x)
, то получим ошибку, поскольку не сможем найти метод as.Date.yearmon
. Если мы напишем library(zoo); x <- as.yearmon("2000-01"); as.Date(x)
, проблем не будет.
Невозможно создать
Date
объект/вектор без «дня», следовательно, ваши NA. Такие пакеты, какyearmon
, создают числовой вектор внутри пользовательского индексного класса, поэтому это не объектDate
, а просто представление.lubridate
преобразует ваши строки вDate
, но добавит день, если он отсутствует. Было бы полезно знать, зачем вам это в форматеDate
. Вы хотите провести анализ временных рядов или что-то подобное? Просто если вам абсолютно не нужен объектDate
для конкретного процесса, существует множество вариантов проведения анализа, которые могут вызывать части d/m/y в строке.