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

如何在DataFrame中找出出现频率最高的基因子集?

找出0-1基因矩阵中出现次数最多的基因组合

步骤1:提取并筛选高频基因列

先从你的DataFrame中分离出基因列,再筛选出指定的前15个高频基因(基于单个基因的出现次数):

# 分离基因列(去掉第一列样本列)
gene_data <- test[, -1]
# 获取前15个高频基因的列名
top_gene_names <- colnames(gene_data)[order(colSums(gene_data), decreasing = TRUE)[1:15]]
# 提取这些高频基因的子集
top_gene_data <- gene_data[, top_gene_names]

步骤2:统计两两基因组合的共现次数

使用基础R的combn函数生成所有两两基因组合,再统计每个组合同时为1的样本数:

# 生成所有两两基因组合
gene_pairs <- combn(colnames(top_gene_data), 2, simplify = FALSE)
# 计算每个组合的共现次数
pair_counts <- sapply(gene_pairs, function(pair) {
  # 仅当两个基因都为1时逻辑与结果为1,求和得到共现次数
  sum(top_gene_data[, pair[1]] & top_gene_data[, pair[2]])
})
# 整理成易读的结果表
result_df <- data.frame(
  基因组合 = sapply(gene_pairs, paste, collapse = " + "),
  共现次数 = pair_counts
)
# 按共现次数降序排序
result_df <- result_df[order(-result_df$共现次数), ]

运行后result_df就是按共现次数排序的两两基因组合列表,比如你示例中的genea + genec会排在前列,共现次数为3。

扩展:处理更多基因的组合

如果需要统计3个及以上基因的组合,只需调整combn的第二个参数即可,比如统计3基因组合:

# 生成所有3基因组合
gene_triples <- combn(colnames(top_gene_data), 3, simplify = FALSE)
# 计算共现次数(所有基因都为1时计数)
triple_counts <- sapply(gene_triples, function(triple) {
  sum(rowSums(top_gene_data[, triple]) == length(triple))
})
# 整理结果并排序
triple_result <- data.frame(
  基因组合 = sapply(gene_triples, paste, collapse = " + "),
  共现次数 = triple_counts
) %>% arrange(desc(共现次数))

注意:基因数量越多,多基因组合的总数会指数增长,计算量会大幅提升,建议仅对高频基因子集进行计算。

优化你的初始代码

你原来的代码可以简化为更易读的形式,避免索引偏移问题:

# 直接获取前15个高频基因的完整数据(包含样本列)
top_genes_with_sample <- test[, c(1, order(colSums(test[, -1]), decreasing = TRUE)[1:15] + 1)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 00:45:40