Что такое эквивалент R для Python .cat.codes, который преобразует категориальные переменные в целочисленные уровни? - PullRequest
0 голосов
/ 03 мая 2018

В python вы можете сгенерировать категориальный код для переменной, используя .cat.code, например,

df['col3'] = df['col3'].astype('category').cat.code

Как ты это делаешь в R?

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Может быть, яснее сделать следующее:

# if you want numeric code for every value
a <- factor(c("good", "bad", "good", "bad", "terrible"))
as.integer(a)
# 2 1 2 1 3


# unique labels and the values for them
setNames(levels(a), seq_along(levels(a)))
#    1          2          3 
# "bad"     "good" "terrible"
0 голосов
/ 03 мая 2018

Еще немного уточню для @ Sid29:

Функция метода python .cat.code извлекает числовое представление уровней фактора. Эквивалент в R:

a <- factor(c("good", "bad", "good", "bad", "terrible"))

as.numeric(a)
[1] 2 1 2 1 3

Обратите внимание, что .cat.code будет представлять NA (или NaN то же самое) как -1, в то время как вышеупомянутое решение в R все еще сохраняет NA и вывод будет просто NA.

Редактировать: as.numeric(a) лучше. Там обсуждается использование функции labels внутри функции as.numeric. См. Предупреждение в ?factor:

В частности, числовое значение, применяемое к фактору, не имеет смысла и может происходить путем неявного принуждения. Чтобы преобразовать коэффициент f приблизительно в его исходные числовые значения, рекомендуется использовать as.numeric (уровни (f)) [f] и немного более эффективно, чем as.numeric (as.character (f)).

Есть некоторые аномалии, связанные с факторами, которые имеют уровень NA в качестве уровня. Рекомендуется использовать их экономно, например, только для целей табулирования.

Если у вас есть значение NA, оно приведет все значения к NA, поэтому причина использования labels. Интересно, что c(a) работает (см. Ответ @ 42 ниже).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...