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