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

如何将R语言dataframe的分类列拆分为多列并填充二进制值?

解决方法:把分类列拆分为多列的DataFrame重塑

原始数据

你的初始DataFrame定义如下:

df <- data.frame(animal = c("dog", "dog", "cat", "dog", "cat", "cat"),
                 hunger = c(0, 1, 1, 0, 1,1))

方法1:用tidyverse(tidyr)实现(推荐)

这是通用型最强的方法,适合分类较多的场景,需要先安装并加载tidyr(或整个tidyverse包):

# 安装包(首次使用时执行)
install.packages("tidyverse")
library(tidyverse)

# 给每个动物组添加组内行号,作为重塑的标识
df_with_row_id <- df %>%
  group_by(animal) %>%
  mutate(row_id = row_number()) %>%
  ungroup()

# 转成宽格式
final_df <- df_with_row_id %>%
  pivot_wider(names_from = animal,  # 用animal的取值作为新列名
              values_from = hunger) # 用hunger的值填充对应单元格 %>%
  select(-row_id) # 移除临时的行号列

运行后得到的final_df就是你想要的结果:

> final_df
# A tibble: 3 × 2
    dog   cat
  <dbl> <dbl>
1     0     1
2     1     1
3     0     1

方法2:Base R 直接拆分合并(适合分类少的情况)

如果你的分类只有dog和cat两种,直接拆分再合并更简单:

# 提取对应动物的hunger值
dog_vals <- df$hunger[df$animal == "dog"]
cat_vals <- df$hunger[df$animal == "cat"]

# 组合成新DataFrame
final_df <- data.frame(dog = dog_vals, cat = cat_vals)

方法3:用data.table实现

如果习惯用data.table,可以这样做:

# 安装包(首次使用时执行)
install.packages("data.table")
library(data.table)

# 转成data.table并添加组内行号
setDT(df)[, row_id := .I, by = animal]

# 重塑为宽格式并移除行号
final_df <- dcast(df, row_id ~ animal, value.var = "hunger")[, row_id := NULL]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 18:37:59