在python中,您可以使用.cat.code生成变量的分类代码,例如
df['col3'] = df['col3'].astype('category').cat.code
你在R中怎么做?
答案 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"