Как извлечь месяц из даты в R
Я использую пакет lubridate
и применяю функцию month
для извлечения месяца с даты. Я запустил команду str в поле даты, и я получил
Factor w/ 9498 levels "01/01/1979","01/01/1980",..: 5305 1 1 1 1 1 1 1 1 1 ...
> v1$Date<-month(v1$Date)
Error in as.POSIXlt.character(as.character(x), ...) :
character string is not in a standard unambiguous format
Вот пример моего фрейма данных
https://drive.google.com/file/d/0B6cqWmwsEk20Q2dHblhXZi14Wk0/edit?usp=sharing
Я не знаю, что я делаю неправильно.
Ответы
Ответ 1
?month
:
Дата-время должно быть POSIXct, POSIXlt, Date, Period, chron, yearmon, yearqtr, zoo, zooreg, timeDate, xts, его, ti, jul, timeSeries и fts объекты.
Ваш объект является фактором, а не символом символа (предположительно из-за stringsAsFactors = TRUE
). Вы должны преобразовать свой вектор в некоторый класс datetime, например, в POSIXlt
:
library(lubridate)
some_date <- c("01/02/1979", "03/04/1980")
month(as.POSIXlt(some_date, format="%d/%m/%Y"))
[1] 2 4
Также есть удобная функция dmy
, которая может делать то же самое (подсказка, предложенная @Henrik):
month(dmy(some_date))
[1] 2 4
Идя еще дальше, @IShouldBuyABoat дает еще один намек на то, что форматы символов dd/mm/yyyy принимаются без какого-либо явного каста:
month(some_date)
[1] 2 4
Список форматов см. в разделе ?strptime
. Вы обнаружите, что "стандартный недвусмысленный формат" означает
Форматы по умолчанию соответствуют правилам международного стандарта ISO 8601 стандарт, который выражает день как "2001-02-28" и время как "14:01:02", используя ведущие нули, как здесь.
Ответ 2
Без необходимости внешнего пакета:
если ваша дата имеет следующий формат:
myDate = as.POSIXct("2013-01-01")
Затем, чтобы получить номер месяца:
format(myDate,"%m")
И чтобы получить строку месяца:
format(myDate,"%B")
Ответ 3
вы можете преобразовать его в формат даты с помощью
new_date<- as.Date(old_date, "%m/%d/%Y")}
из new_date
, вы можете получить месяц strftime()
month<- strftime(new_date, "%m")
old_date<- "01/01/1979"
new_date<- as.Date(old_date, "%m/%d/%Y")
new_date
#[1] "1979-01-01"
month<- strftime(new_date,"%m")
month
#[1] "01"
year<- strftime(new_date, "%Y")
year
#[1] "1979"
Ответ 4
Ее еще один подход R base
:
В вашем примере: Некоторая дата:
Some_date<-"01/01/1979"
Мы говорим R, "Это дата"
Some_date<-as.Date(Some_date)
Мы извлекаем месяц:
months(Some_date)
output: [1] "January"
Наконец, мы можем преобразовать его в числовую переменную:
as.numeric(as.factor(months(Some_date)))
outpt: [1] 1
Ответ 5
На всякий случай формат не правильный
DataFrame <- DF %>%
mutate(DateColumn = as.Date(DateCoulmn))
затем используйте следующее:
DataFrame$months <- months(DataFrame$DateColumn)
это создаст новый столбец с названием месяца и добавит его в ваш DF