Python的.cat.codes的R等价物是什么,它将分类变量转换为整数级别?

时间:2018-05-02 21:48:30

标签: r numeric categorical-data r-factor

在python中,您可以使用.cat.code生成变量的分类代码,例如

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

你在R中怎么做?

2 个答案:

答案 0 :(得分:1)

为@ 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中的警告:

  

特别是,as.numeric应用于一个因子是没有意义的,并且可能通过隐式强制发生。要将因子f转换为大约其原始数值,建议使用.numeric(levels(f))[f],并且比as.numeric(as.character(f))稍微更有效。

     

有一些异常与将NA作为一个级别的因素相关联。建议谨慎使用它们,例如,仅用于制表目的。

如果您有NA值,则会将所有值强制转换为NA,因此使用labels的原因。有趣的是,c(a)有效(见下面的@ 42答案)。

答案 1 :(得分:0)

执行以下操作可能更清楚:

# 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"