Есть ли способ в R ранжировать категориальную переменную (из символов) в ранжированные порядковые данные?

#r #categorical-data

#r #категориальные данные

Вопрос:

Скажем, у меня есть список символьных строк alphabets = c(a, b, c, d,..., z) , и я хотел бы получить индекс этого списка в качестве нового столбца в data.frame .

например, (b, a, c, d, e, g) дало бы (2, 1, 3, 4, 5, 7) .

Ответ №1:

Необходимое вам решение — преобразовать вектор символов в коэффициент:

 alphabets = c("b", "a", "c", "d", "e", "g")
#convert to class factor with the order define by the levels option
alphabets<-factor(alphabets, levels=letters)

#display the values
as.numeric(alphabets)
#[1] 2 1 3 4 5 7
  

Комментарии:

1. В частности, поскольку OP запрашивал «ранжированные порядковые данные», было бы лучше использовать ordered коэффициент — as.numeric(ordered(x, levels=letters))

Ответ №2:

Это случай для match

 x <- c("b", "a", "c", "d", "e", "g")

match(x, letters)
#[1] 2 1 3 4 5 7
  

Или sapply с grep возвратом именованного int вектора

 sapply(x, grep, letters)
#b a c d e g
#2 1 3 4 5 7
  

Два комментария:

  1. «У меня есть список символьных строк» Будьте точны с именами классов объектов! alphabets = c("a", "b", "c", "d") является character вектором, а не list .
  2. letters является встроенной константой, которая возвращает 26 строчных букв (латинского алфавита) в качестве character вектора. Подробности см. ?letters .