首页 > 解决方案 > 仅对 R 中的分类变量进行分类

问题描述

我在 R 中有一个像这样的 df


isHot isCrispy Restaurant
1     0        A
0     0        B
1     1        B
0     0        C

我希望数据集看起来像这样:


isHot isCrispy Restaurant
1     0        0
0     0        1
1     1        1
0     0        2

我怎样才能做到这一点?

我试过这个,但我得到的东西从 0 而不是 1 开始。如果我减去 1,那么其他列就会变成 0 和 -1。

df %>% sapply(unclass)

isHot isCrispy Restaurant
1     0        1
0     0        2
1     1        2
0     0        3

标签: r

解决方案


使用across您可以将函数应用于所有字符或因子列。match+unique会给每个值一个唯一的数字,-1确保它们从 0 开始。

library(dplyr)

df %>% 
  mutate(across(where(~is.character(.) | is.factor(.)), 
        ~match(., unique(.)) - 1))

#  isHot isCrispy Restaurant
#1     1        0          0
#2     0        0          1
#3     1        1          1
#4     0        0          2

推荐阅读