Я использую пакет lubridate
и применяю функцию month
для извлечения месяца из даты. Я выполнил команду str для поля date и получил следующее
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
Я не знаю, что я делаю неправильно.
Состояние месяц
:
Дата-время должна быть POSIXct, POSIXlt, Date, Period, chron, yearmon, yearqtr, zoo, zooreg, timeDate, xts, its, ti, jul, timeSeries и fts. объекты.
Ваш объект является фактором, даже не символьным вектором (предположительно из-за stringsAsFactors = TRUE
). Вы должны преобразовать ваш вектор в какой-либо класс времени, например, в 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/yyy принимаются без явного приведения:
month(some_date)
[1] 2 4
Список форматов см. в ?strptime
. Вы'обнаружите, что "стандартный однозначный формат" означает
Форматы по умолчанию следуют правилам международного стандарта ISO 8601. стандарта, который выражает день как "2001-02-28", а время как "14:01:02" с использованием ведущих нулей, как здесь.
Без необходимости использования внешнего пакета:.
если ваша дата имеет следующий формат:
myDate = as.POSIXct("2013-01-01")
Тогда для получения номера месяца:
format(myDate,"%m")
И чтобы получить строку месяца:
format(myDate,"%B")
вы можете преобразовать его в формат даты.
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"