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

如何正确转换DataFrame为矩阵并生成弦图所需格式数据?

解决TRAV/TRBV配对弦图的矩阵与DataFrame生成问题

一、正确构建带类别层级的频次矩阵

如果你的原始数据是长格式(每行对应一个T细胞受体配对,包含TRAV和TRBV列),先将这两列转为因子类型(锁定所有原始类别,包括频次为0的),再用xtabs生成矩阵:

# 转换为因子,保留所有原始类别,避免层级丢失
tcr_data$TRAV <- factor(tcr_data$TRAV, levels = unique(tcr_data$TRAV))
tcr_data$TRBV <- factor(tcr_data$TRBV, levels = unique(tcr_data$TRBV))

# 生成带类别标签的频次矩阵
pair_matrix <- xtabs(~ TRAV + TRBV, data = tcr_data)

此时pair_matrix的行名对应所有TRAV类别,列名对应所有TRBV类别,完整保留了层级信息。

二、转换为circlize所需的DataFrame格式

将矩阵转换为包含from、to、value三列的DataFrame,推荐两种工具实现:

方法1:用reshape2::melt

library(reshape2)
# 矩阵转长格式DataFrame
pair_df <- melt(pair_matrix, value.name = "value")
# 重命名列名匹配circlize要求
colnames(pair_df) <- c("from", "to", "value")
# 可选:过滤掉频次为0的行,减少冗余数据
pair_df <- pair_df[pair_df$value > 0, ]

方法2:用tidyr::pivot_longer

library(tidyr)
pair_df <- as.data.frame(pair_matrix) %>%
  pivot_longer(cols = -TRAV, names_to = "to", values_to = "value") %>%
  rename(from = TRAV) %>%
  filter(value > 0)

三、直接处理带频次的原始数据

如果你的原始数据已经包含频次列(比如每行是TRAV、TRBV、count),无需生成矩阵,直接整理格式即可:

pair_df <- raw_data %>%
  rename(from = TRAV, to = TRBV, value = count) %>%
  filter(value > 0)

四、绘制弦图

用处理好的pair_df直接调用circlize函数:

library(circlize)
chordDiagram(pair_df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 09:24:53