Как извлечь месяц из даты в 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