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

如何在R中统计多CSV文件中体细胞变异行数并绘制柱状图?

统计体细胞变异数量并绘制柱状图方案

嗨,我来帮你调整代码,实现只统计每个CSV文件中somatic类型的变异数量~

你的原始代码是用count.fields统计了每个文件的总行数(总变异数),但要筛选somatic类型,我们需要读取每个CSV文件并根据Origin列的条件来计数,具体修改步骤如下:

修改后的完整代码

# 获取所有CSV文件列表
combined_data <- list.files(pattern = ".csv")

# 遍历每个文件,统计Origin为"somatic"的行数
num_somatic <- lapply(combined_data, function(x) {
  # 读取当前CSV文件
  df <- read.csv(x)
  # 统计符合条件的行数,na.rm=TRUE避免NA值干扰计数
  sum(df$Origin == "somatic", na.rm = TRUE)
})

# 将列表转换为数值向量
varn_somatic <- unlist(num_somatic)

# 创建数据框,建议用文件名作为x轴标签(比1:41更直观)
table_somatic <- data.frame(filename = combined_data, somatic_count = varn_somatic)

# 绘制柱状图
ggplot(data = table_somatic, aes(x = filename, y = somatic_count)) +
  geom_bar(stat = "identity") +
  # 旋转x轴标签,避免文件名过长重叠
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

关键修改说明

  1. 替换计数逻辑:不再用count.fields统计总行数,而是读取完整数据框后,用sum(df$Origin == "somatic")筛选并计数符合条件的行
  2. 处理NA值:添加na.rm = TRUE,如果Origin列存在缺失值(NA),会自动忽略这些行,避免计数结果出现NA
  3. 优化x轴标签:用实际文件名代替1:41,这样图表能直接对应到每个文件,可读性更强;同时添加旋转x轴标签的主题设置,防止文件名过长重叠

可选优化:同时展示总变异数和体细胞变异数

如果需要在同一张图里对比总变异数和体细胞变异数,可以参考以下代码:

# 同时统计总变异数和体细胞变异数
counts <- lapply(combined_data, function(x) {
  df <- read.csv(x)
  total <- nrow(df)
  somatic <- sum(df$Origin == "somatic", na.rm = TRUE)
  data.frame(total, somatic)
})

# 合并数据并整理格式
counts_df <- do.call(rbind, counts)
counts_df$filename <- combined_data
counts_long <- tidyr::pivot_longer(counts_df, cols = c(total, somatic), names_to = "variant_type", values_to = "count")

# 绘制分组柱状图
ggplot(counts_long, aes(x = filename, y = count, fill = variant_type)) +
  geom_bar(stat = "identity", position = "dodge") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 12:32:28