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

如何用R实现批量VCF文件自动化处理并转换为指定结构data.frame

R语言批量处理VCF文件自动化实现方案

原始需求

需要批量处理大量格式统一的.vcf文件,实现自动化处理流程,最终将每个VCF文件转换为指定结构的小型data.frame。
原始单文件处理代码如下:

library(dplyr)
library(tidyr)

df <- read.table("DNA_rep1.vcf", sep="	")
df$chromosome <- sub(pattern = "chr",replacement = "", df[,1])
df <- df %>% separate(V8,c("8.1", "8.2","8.3"), extra='drop')
df <- df[,c(13,2,9,6)]
df <- cbind(rep(29, nrow(df)), df)

具体改造要求

  • 代码中固定的样本ID值29需要设置为函数参数,方便调用函数处理不同文件时自定义样本ID
  • 最终生成的data.frame列名需按如下规则设置:
colnames(df) <- c("sample", "chromosome", "start", "end", "segVal")
  • 每个文件生成的data.frame需要按行追加合并到已有的汇总数据表中,实现类似prev.df <- rbind(prev.df, df)的效果。

最终实现方案

library(dplyr)
library(tidyr)
library(stringr)

# 自定义VCF处理函数
vcf2cnv.df <- function(x){
  a <- read.table(x, sep="	")
  # 去除染色体编号前缀"chr"
  a$chromosome <- sub(pattern = "chr", replacement = "", a[,1])
  # 拆分V8列提取所需信息
  a <- a %>% separate(V8,c("8.1", "8.2","8.3"), extra='drop')
  # 筛选保留需要的列
  a <- a %>% select(c(13,2,9,6))
  # 从文件名提取数字生成样本ID
  y <- as.numeric((str_extract_all(x, pattern = "[0-9]", simplify = TRUE))) 
  y <- paste(y, collapse = "")
  y <- as.numeric(gsub('.{1}$', '', y))
  a <- cbind(rep(y, nrow(a)), a)
  # 设置标准列名
  colnames(a) <- c("sample", "chromosome", "start", "end", "segVal")
  # 单个样本结果保存为csv
  write.csv(a, file = paste0(y, "_DNA_CopyNumberVariants.csv"))                         
}

## 批量运行并合并所有结果
# 设置工作目录
setwd("/my/working/directory")
# 匹配目录下所有vcf文件
file_vcf <- list.files(pattern = "*.vcf", full.names = TRUE)
lapply(file_vcf, vcf2cnv.df)
# 合并所有生成的csv文件为汇总表
file_csv <- list.files(pattern = "*.csv", full.names = TRUE)
for (file in file_csv){
  # 汇总表不存在则先创建
  if (!exists("Colon_cnv")){
    Colon_cnv <- read.csv(file, header=TRUE)
  }
  # 汇总表已存在则追加行
  if (exists("Colon_cnv")){
    temp_dataset <-read.csv(file, header=TRUE)
    Colon_cnv<-rbind(Colon_cnv, temp_dataset)
    rm(temp_dataset)
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:09:00