Ответ 1
Используйте match
и предопределенный вектор month.abb
:
tst <- c("Jan","Mar","Dec")
match(tst,month.abb)
[1] 1 3 12
Мне дали csv с столбцом месяца как переменной char с первыми тремя буквами месяца. Например:
"Jan", "Feb","Mar",..."Dec"
Есть ли способ преобразовать это в числовое представление месяца, от 1 до 12 или даже тип, который находится в формате даты?
Используйте match
и предопределенный вектор month.abb
:
tst <- c("Jan","Mar","Dec")
match(tst,month.abb)
[1] 1 3 12
Вы можете использовать встроенный вектор 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"
Пара вариантов:
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