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

如何从Data Frame生成各ID对应的哑变量?

生成ID哑变量矩阵的实现方法

嗨,我来帮你解决这个生成ID哑变量的问题!这里有两种实用的方法,分别基于tidyverse工具包和基础R,你可以根据自己的习惯选择:

方法一:使用tidyverse(推荐,代码更直观)

tidyverse的管道式语法能让数据处理步骤更清晰,适合习惯现代R风格的用户:

library(tidyverse)

# 1. 将宽格式数据转换为长格式,过滤NA并去重同一list下的重复ID
df_long <- df %>%
  pivot_longer(cols = everything(), names_to = "list", values_to = "ID") %>%
  filter(!is.na(ID)) %>%
  distinct(list, ID)

# 2. 将长格式转回宽格式,自动生成哑变量,缺失值填充为0
result <- df_long %>%
  mutate(value = 1) %>%
  pivot_wider(names_from = ID, values_from = value, values_fill = 0)

# 查看结果
print(result)

运行后你会得到完全符合预期的输出:行是原数据的列名(list1/list2/list3),列是所有唯一ID,单元格值为1表示对应list包含该ID,0则表示不包含。

方法二:使用基础R(无需额外安装包)

如果你不想依赖第三方包,用基础R也能轻松实现:

# 1. 提取所有非NA的唯一ID
all_unique_ids <- unique(unlist(df[!is.na(df)]))

# 2. 创建空的结果矩阵,设置行名(原列名)和列名(所有唯一ID)
result_matrix <- matrix(
  data = 0,
  nrow = ncol(df),
  ncol = length(all_unique_ids),
  dimnames = list(colnames(df), all_unique_ids)
)

# 3. 遍历每一列,标记存在的ID为1
for (col in colnames(df)) {
  valid_ids <- na.omit(df[[col]])
  result_matrix[col, as.character(valid_ids)] <- 1
}

# 转成data.frame格式(可选)
result_df <- as.data.frame(result_matrix)
print(result_df)

这段代码先构建空矩阵,再通过循环给每个list对应的ID位置赋值1,逻辑简单直接,不需要安装任何额外工具包。

两种方法都能完美实现你想要的效果,你可以根据自己的使用场景选择~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:19:14