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

如何在Excel或R中将数据集转换为存在性二进制矩阵?

Excel实现方法
  1. 拆分原始数据
    • 假设原始数据存放在A列(A1:A3),选中A列后点击「数据」选项卡的「分列」功能,选择「分隔符号」并勾选「空格」,完成后RowX会保留在A列,后续的字母会被拆分到B、C等列中。
  2. 提取唯一字母作为表头
    • 将B列及后续所有分散的字母复制到新区域,通过「数据」→「删除重复值」得到唯一的字母集合(A、B、C、D、E),把这些字母作为新表格的表头(比如从F1单元格开始排列)。
  3. 生成0/1标记矩阵
    • 在F2单元格输入公式:=IF(ISNUMBER(MATCH(F$1,$B2:$D2,0)),1,0),回车后向右、向下填充公式即可完成标记。
    • 也可使用COUNTIF简化公式:=--(COUNTIF($B2:$D2,F$1)>0),其中--用于将布尔结果转换为0/1数值。
R实现方法

方法1:tidyverse工具链(推荐,代码直观易维护)

# 加载工具包
library(tidyverse)

# 模拟原始数据结构
raw_data <- tibble(row_id = c("Row1", "Row2", "Row3"),
                   content = c("A D", "B C", "A C E"))

# 转换为目标格式
target_data <- raw_data %>%
  separate_rows(content, sep = " ") %>%  # 将每行的字母拆分为单独行
  mutate(flag = 1) %>%  # 标记存在的字母为1
  pivot_wider(names_from = content, values_from = flag, values_fill = 0)  # 转换为宽表,缺失值补0

print(target_data)

运行后输出:

# A tibble: 3 × 6
  row_id     A     B     C     D     E
  <chr>  <dbl> <dbl> <dbl> <dbl> <dbl>
1 Row1       1     0     0     1     0
2 Row2       0     1     1     0     0
3 Row3       1     0     1     0     1

方法2:基础R实现(无需额外安装包)

# 模拟原始数据
row_names <- c("Row1", "Row2", "Row3")
value_lists <- strsplit(c("A D", "B C", "A C E"), " ")

# 生成交叉计数表
cross_table <- table(rep(row_names, lengths(value_lists)), unlist(value_lists))

# 转换为数据框格式
target_df <- as.data.frame.matrix(cross_table)

print(target_df)

输出结果与上述方法一致,行名为Row1/Row2/Row3,列名为A-E,单元格值为0或1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 05:05:46