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

在R中如何将DataFrame转换为指定格式的二元特征

问题描述

我有如下R语言DataFrame:

# 示例数据构造
participants <- c("A", "A", "A", "B", "C", "C")
answers <- c("alpha", "beta", "gamma", "beta", "beta", "gamma")
df <- data.frame(participants, answers)

数据预览:

participants answers
1            A   alpha
2            A    beta
3            A   gamma
4            B    beta
5            C    beta
6            C   gamma

其中answers列的实际取值远多于示例中的范围。我想要将其转换为如下的二元特征格式:

participants answers value
1            A   alpha     1
2            A    beta     1
3            A   gamma     1
4            B   alpha     0
5            B    beta     1
6            B   gamma     0
7            C   alpha     0
8            C    beta     1
9            C   gamma     1

我猜测需要先获取answers和participants的levels,但不清楚后续操作,请问该如何实现?

实现方案

你的思路是正确的,核心逻辑是先生成所有参与者和所有答案的全组合,再将原表中存在的组合标记为1、不存在的标记为0即可,两种常用实现方式如下:

方法1:tidyverse 实现(代码简洁,兼容性强)

无需手动枚举answers取值,可自动适配任意数量的答案分类:

library(tidyverse)

result <- df %>%
  # 生成参与者和答案的全量笛卡尔组合
  expand(participants, answers) %>%
  # 关联原表标记存在的记录
  left_join(mutate(df, value = 1), by = c("participants", "answers")) %>%
  # 未匹配到的记录填充为0
  replace_na(list(value = 0))

方法2:base R 实现(无需加载第三方包)

# 提取所有唯一参与者、唯一答案
all_participants <- unique(df$participants)
all_answers <- unique(df$answers)
# 生成全组合数据框
full_df <- expand.grid(participants = all_participants, answers = all_answers)
# 匹配原表生成二元标记
full_df$value <- as.integer(interaction(full_df) %in% interaction(df))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:06:07