You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R语言中仅对分类变量执行unclass处理并调整编码的方法求助

解决方案:仅对指定列进行0起始编码

我来帮你搞定这个问题!你需要的是只把Restaurant列从字符型转为从0开始的数字编码,同时保留isHot和isCrispy的原始数值,对吧?之前用sapply(unclass)的问题在于它会把所有列都统一处理,导致数值列也被修改,我们只需要针对性操作Restaurant列就行。

方法1:使用dplyr(推荐,符合你习惯的管道语法)

因为你已经在使用管道符%>%,用dplyr的mutate函数可以轻松修改单列:

library(dplyr)

# 先构造你的原始数据框
df <- tibble(
  isHot = c(1, 0, 1, 0),
  isCrispy = c(0, 0, 1, 0),
  Restaurant = c("A", "B", "B", "C")
)

# 转换Restaurant列
df_transformed <- df %>%
  mutate(Restaurant = as.integer(factor(Restaurant)) - 1)
  • 原理:factor(Restaurant)把字符转为因子,默认按字母顺序分配水平(A→1,B→2,C→3);
  • as.integer()提取因子的编码值,再减1就得到0、1、2的结果;
  • 其他列完全保持原始数值不变。

方法2:Base R(无需额外包)

如果不想加载dplyr,直接用基础R修改列即可:

# 原始数据框
df <- data.frame(
  isHot = c(1, 0, 1, 0),
  isCrispy = c(0, 0, 1, 0),
  Restaurant = c("A", "B", "B", "C"),
  stringsAsFactors = FALSE
)

# 转换Restaurant列
df$Restaurant <- as.integer(factor(df$Restaurant)) - 1

进阶:按数据出现顺序编码(而非字母顺序)

如果你的Restaurant列需要按数据中首次出现的顺序编码(而不是固定字母顺序),可以指定因子的levels参数:

df_transformed <- df %>%
  mutate(Restaurant = as.integer(factor(Restaurant, levels = unique(Restaurant))) - 1)

这样不管后续数据中Restaurant的字符顺序如何,都会按它在数据里第一次出现的顺序分配0、1、2的编码。

运行以上代码后,你就能得到想要的结果:

isHotisCrispyRestaurant
100
001
111
002

内容的提问来源于stack exchange,提问作者Eisen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 10:02:35