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

在数据框中提取唯一基因并计算其出现情况(R语言)

解决方案

1. 筛选逻辑说明

从示例数据和期望输出可知,这里的唯一基因指的是仅在单个样本中存在的基因——即对应行的样本列(示例中的B、C、D、E列)里,恰好有1个值为1,其余均为0。

2. 单文件处理(适配大体积CSV)

方法一:data.table(高效处理大文件)

data.table的fread函数读取大文件速度快、内存占用低,适合处理大体积CSV:

library(data.table)

# 读取CSV文件
dt <- fread("目标文件路径.csv")

# 筛选样本列中1的数量恰好为1的基因行
dt_uniq <- dt[rowSums(dt[, -"A", with = FALSE]) == 1]

# 可选:添加该基因的样本出现次数列(此处固定为1)
dt_uniq[, count := rowSums(.SD), .SDcols = -"A"]

方法二:tidyverse 语法

若习惯tidyverse工作流,可结合readr读取文件:

library(tidyverse)

# 读取大CSV文件
df <- read_csv("目标文件路径.csv")

# 筛选唯一基因并统计出现次数
df_uniq <- df %>%
  rowwise() %>%
  mutate(count = sum(c_across(-A))) %>%
  filter(count == 1) %>%
  ungroup()

方法三:Base R 原生实现

# 读取CSV文件
df <- read.csv("目标文件路径.csv")

# 计算每行样本列中1的数量,筛选符合条件的行
row_counts <- rowSums(df[, -1]) # 假设第一列为基因ID列
df_uniq <- df[row_counts == 1, ]

# 添加出现次数列
df_uniq$count <- row_counts[row_counts == 1]

3. 多文件批量处理

如果有多个CSV文件,可批量读取、处理并统计每个基因在所有文件中的出现次数:

library(data.table)

# 获取目标目录下所有CSV文件路径
csv_files <- list.files(path = "CSV文件所在目录", pattern = "\\.csv$", full.names = TRUE)

# 批量处理每个文件,收集筛选出的唯一基因
all_unique_genes <- rbindlist(lapply(csv_files, function(file) {
  dt <- fread(file)
  dt_uniq <- dt[rowSums(dt[, -"A", with = FALSE]) == 1]
  dt_uniq[, source_file := basename(file)] # 标记基因来源文件
  return(dt_uniq)
}))

# 统计每个基因在多少个文件中被筛选为唯一基因
gene_occurrence <- all_unique_genes[, .(出现次数 = .N), by = A]

# 可选:合并基因原始信息与统计结果
final_result <- merge(all_unique_genes, gene_occurrence, by = "A")

示例数据验证

用你提供的示例数据验证上述代码:

# 示例数据
df <- data.frame(
  A = c("G1", "G2", "G3", "G4", "G5","G6","G7", "G8", "G9","G10"),
  B = c(1, 0, 1, 0, 1, 1, 1, 0, 0, 0),
  C = c(1, 0, 1, 0, 0, 0, 0, 1, 1, 0),
  D = c(1, 1, 0, 0, 0, 0, 0, 0, 0, 1),
  E = c(1, 1, 1, 1, 0, 0, 0, 0, 0, 0))

# Base R筛选验证
row_counts <- rowSums(df[, -1])
df_uniq <- df[row_counts == 1, ]

# 输出结果与期望一致
print(df_uniq)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 06:37:11