Преобразовать месяцы ммм в число - PullRequest
21 голосов
/ 01 июля 2011

Мне дали csv со столбцом с именем month в качестве переменной char с первыми тремя буквами месяца.Например:

"Jan", "Feb","Mar",..."Dec"

Есть ли способ преобразовать это в числовое представление месяца, от 1 до 12 или даже в тип в формате даты?

Ответы [ 4 ]

48 голосов
/ 01 июля 2011

Используйте match и предопределенный вектор month.abb:

tst <- c("Jan","Mar","Dec")
match(tst,month.abb)
[1]  1  3 12
18 голосов
/ 01 июля 2011

Вы можете использовать встроенный вектор month.abb для проверки при преобразовании в число, например:

mm <- c("Jan","Dec","jan","Mar","Apr")

sapply(mm,function(x) grep(paste("(?i)",x,sep=""),month.abb))
Jan Dec jan Mar Apr 
  1  12   1   3   4 

Конструкция grep учитывает различия в использовании заглавных букв. Если это не нужно,

match(mm,month.abb) 

работает так же хорошо.

Если у вас также есть столбец «День» и «Год», вы можете использовать любую из функций преобразования, используя соответствующие коды (см. Также ?strftime)

например

mm <- c("Jan","Dec","jan","Mar","Apr")
year <- c(1998,1998,1999,1999,1999)
day <- c(4,10,3,16,25)

dates <- paste(year,mm,day,sep="-")

strptime(dates,format="%Y-%b-%d")
[1] "1998-01-04" "1998-12-10" "1999-01-03" "1999-03-16" "1999-04-25"
3 голосов
/ 02 августа 2018

Просто добавляем к существующим ответам и комментарию в вопросе:

readr::parse_date("20/DEZEMBRO/18","%d/%B/%y",locale=locale("pt"))

Формат даты результатов "2018-12-20". locale("pt") для португальского, который используется в Бразилии, может сделать "es" для испанского, "fr" для французского и т. Д.

2 голосов
/ 01 июля 2011

Несколько вариантов использования:

vec <- c("Jan","Dec","Jan","Apr")

:

> Months <- 1:12
> names(Months) <- month.abb
> unname(Months[vec])
[1]  1 12  1  4

и / или

> match(vec, month.abb)
[1]  1 12  1  4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...