#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
Два комментария:
- «У меня есть список символьных строк» Будьте точны с именами классов объектов!
alphabets = c("a", "b", "c", "d")
являетсяcharacter
вектором, а неlist
. letters
является встроенной константой, которая возвращает 26 строчных букв (латинского алфавита) в качествеcharacter
вектора. Подробности см.?letters
.