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

在R中从不等长向量生成0-1存在性矩阵

生成0-1存在性矩阵的R语言解决方案

我是R语言新手,现在有多个不等长的字符串向量(最多20个,每个最多300个值),想要生成一个0-1存在性矩阵:所有向量的唯一值作为行名,向量名作为列名,值在对应向量中存在标1,不存在标0。已经合并向量得到唯一值列表ASVitems,但不知道怎么生成矩阵并标记存在性。

示例数据

v1 = c("ASV581", "ASV547", "ASV434", "ASV378", "ASV7", "ASV1478", "ASV676", "ASV361", "ASV142", "ASV92", "ASV16", "ASV2")  
v2 = c("ASV15", "ASV7", "ASV5", "ASV2", "ASV676", "ASV581", "ASV522", "ASV361")
v3 = c("ASV1", "ASV7", "ASV3", "ASV15", "ASV2", "ASV38", "ASV28", "ASV22", "ASV5", "ASV346", "ASV208", "ASV139", "ASV13", "ASV919", "ASV676")  
v4 = c("ASV15", "ASV7", "ASV5", "ASV2", "ASV208", "ASV139", "ASV361", "ASV142")

已执行代码

x <- c(v1, v2, v3, v4)
ASVitems <- unique(x)

期望输出示例

[v1] [v2] [v3] [v4]
ASV2     1    1    1    1
ASV3     0    0    1    0
ASV5     0    1    1    0
ASV7     1    1    1    1
...

解决方案

方法1:基础R原生实现(无需额外包)

  1. 先把所有向量存入列表,方便批量处理:
vec_list <- list(v1 = v1, v2 = v2, v3 = v3, v4 = v4)
  1. 批量检查每个唯一值在各向量中的存在性,生成0-1矩阵:
presence_matrix <- sapply(vec_list, function(vec) {
  as.integer(ASVitems %in% vec)
})

# 设置行名为唯一值集合
rownames(presence_matrix) <- ASVitems

执行后用head(presence_matrix)即可查看前几行结果。

方法2:tidyverse包实现(更直观的 tidy 风格)

如果习惯数据整理的 tidy 语法,可以用这套方案:

  1. 先安装并加载包:
install.packages("tidyverse")
library(tidyverse)
  1. 转换数据格式生成矩阵:
# 把向量列表转成长格式数据框
long_df <- vec_list %>%
  enframe(name = "vector_name", value = "ASV") %>%
  unnest(cols = c(ASV)) %>%
  mutate(present = 1)

# 转成宽格式的0-1矩阵
presence_matrix_tidy <- long_df %>%
  pivot_wider(names_from = vector_name, values_from = present, values_fill = 0) %>%
  column_to_rownames(var = "ASV") %>%
  as.matrix()

这个方法的逻辑更贴近"从数据到矩阵"的直观转换过程,适合新手理解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 20:02:24