2025.06.17【BUG】|多樣品VCF文件合并技巧及注意事項(以bcftools為例)

文章目錄

    • @[toc]
    • 一、合并VCF的常用命令
      • 1.1 合并多個bgzip壓縮的VCF文件
      • 1.2 使用文件列表合并
    • 二、合并前的準備與注意事項
      • 2.1 文件格式要求
      • 2.2 樣本名唯一性
      • 2.3 檢查文件模式匹配
    • 三、常見報錯與解決方法
      • 3.1 報錯:`Error: Duplicate sample names (sample1), use --force-samples to proceed anyway.`
      • 3.2 報錯:`Could not retrieve index file for ...`
    • 四、自動化腳本推薦
      • 4.1 檢查并轉換VCF為bgzip格式
      • 4.2 檢查重復樣本并生成唯一文件列表
      • 4.3 合并并生成統計
    • 五、合并后格式轉換與統計
      • 5.1 轉換為TXT表格
      • 5.2 統計每個樣品的SNP數
    • 六、總結

在這里插入圖片描述

在群體遺傳學、RAD-seq等高通量測序分析中,常常需要將多個樣品的VCF文件合并為一個群體VCF文件,便于后續的群體變異分析、PCA、GWAS等。本文以bcftools為例,詳細介紹多樣品VCF合并的標準流程、常見報錯及解決方法,并附帶自動化腳本工具。


一、合并VCF的常用命令

1.1 合并多個bgzip壓縮的VCF文件

其實一般常見做法是使用gatk CombineGVCFs命令將g.vcf.gz格式的各個樣品進行合并后再進行質控,過濾。但是實際情況是沒有過濾的snp文件較大,再加上如果做群體遺傳分析,樣品較多,合并環節就相當耗費時間。因此,這里選擇將過濾后的vcf.gz文件使用bcftools進行合并,可以大大縮短合并時間,提升分析效率。

bcftools merge -Oz -o merged_filtered_snps.vcf.gz sample1.vcf.gz sample2.vcf.gz sample3.vcf.gz
tabix -p vcf merged_filtered_snps.vcf.gz

1.2 使用文件列表合并

當樣品較多時,推薦先生成一個文件列表:

ls aa*/aa*_filtered.vcf.gz > vcf_list.txt
bcftools merge -Oz -o merged_filtered_snps.vcf.gz -l vcf_list.txt
tabix -p vcf merged_filtered_snps.vcf.gz

二、合并前的準備與注意事項

2.1 文件格式要求

  • 必須為bgzip壓縮格式.vcf.gz),且有.tbi索引文件。
  • 可用如下命令檢查和轉換:
    bgzip sample.vcf
    tabix -p vcf sample.vcf.gz
    

2.2 樣本名唯一性

  • 每個VCF文件的樣本名必須唯一,不能有重復。
  • 可用如下命令檢查樣本名:
    bcftools query -l sample1.vcf.gz
    

2.3 檢查文件模式匹配

  • 避免通配符匹配到同一樣本的多個文件(如sample1_filtered.vcf.gzsample1_tmp_filtered.vcf.gz)。
  • 推薦只保留每個樣本的最終過濾文件。

三、常見報錯與解決方法

3.1 報錯:Error: Duplicate sample names (sample1), use --force-samples to proceed anyway.

原因:合并的VCF文件中有重復的樣本名。

解決方法

  • 檢查文件列表,確保每個樣本只出現一次。
  • 可用如下腳本自動檢查并生成唯一文件列表:
# scripts/check_duplicate_samples.py
# 用法:python scripts/check_duplicate_samples.py 'aa*/aa*_filtered.vcf.gz' unique_vcf_list.txt
  • 合并時用唯一文件列表:
    bcftools merge -Oz -o merged_filtered_snps.vcf.gz -l unique_vcf_list.txt
    

3.2 報錯:Could not retrieve index file for ...

原因:缺少.tbi索引文件。

解決方法

tabix -p vcf sample.vcf.gz

四、自動化腳本推薦

4.1 檢查并轉換VCF為bgzip格式

# scripts/check_and_convert_vcf.py
# 用法:python scripts/check_and_convert_vcf.py 'aa*/aa*_filtered.vcf*'

4.2 檢查重復樣本并生成唯一文件列表

# scripts/check_duplicate_samples.py
# 用法:python scripts/check_duplicate_samples.py 'aa*/aa*_filtered.vcf.gz' unique_vcf_list.txt

4.3 合并并生成統計

bcftools merge -Oz -o merged_filtered_snps.vcf.gz -l unique_vcf_list.txt
tabix -p vcf merged_filtered_snps.vcf.gz
bcftools stats merged_filtered_snps.vcf.gz > merged_stats.txt

五、合并后格式轉換與統計

5.1 轉換為TXT表格

# scripts/vcf_to_txt.py
# 用法:python scripts/vcf_to_txt.py merged_filtered_snps.vcf.gz

5.2 統計每個樣品的SNP數

# scripts/count_snp_per_sample.py
# 用法:python scripts/count_snp_per_sample.py merged_filtered_snps.vcf.gz

六、總結

  • 合并VCF前請確保每個樣品只保留一個最終VCF文件,且為bgzip格式并有索引。
  • 合并時推薦用文件列表,避免通配符誤操作。
  • 遇到重復樣本名、缺少索引等報錯時,優先檢查文件列表和文件格式。
  • 可用Python腳本自動化檢查、轉換和統計,提升效率。

如需腳本源碼或Snakemake自動化流程,可私信或評論獲取!


🌟 非常感謝您抽出寶貴的時間閱讀我的文章。如果您覺得這篇文章對您有所幫助,或者激發了您對生物信息學的興趣,我誠摯地邀請您:

👍 點贊這篇文章,讓更多人看到我們共同的熱愛和追求。

🔔 關注我的賬號,不錯過每一次知識的分享和探索的旅程。

📢 您的每一個點贊和關注都是對我最大的支持和鼓勵,也是推動我繼續創作優質內容的動力。

📚 我承諾,將持續為您帶來深度與廣度兼具的生物信息學內容,讓我們一起在知識的海洋中遨游,發現更多未知的奇跡。

💌 如果您有任何問題或想要進一步交流,歡迎在評論區留言,我會盡快回復您。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/85098.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/85098.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/85098.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

包含30個APP客戶端UI界面的psd適用于旅游酒店項目

包含30個APP客戶端UI界面的psd適用于旅游酒店項目 此資源包含30個完全可編輯的psd界面組成。內容包括歡迎頁、登錄、注冊、首頁、搜索、側邊菜單、用戶中心、個人介紹、用戶空間、產品詳細信息、酒店預定、天氣情況等各種常用界面,您可以將其用于旅游酒店類的APP應用…

ArrayList源碼分析

目錄 ArrayList簡介 ArrayList和vector的區別(了解即可) ArrayList添加null值 ArrayList和LinkedList區別 ArrayList核心源碼解讀 ArrayList擴容機制分析 一步一分析ArrayList擴容機制 hugeCapacity()方法 System.arraycopy() Arrays.copyOf()方法 …

NX二次開發C#---通過Face找Edges,再通過Edges找Curve

文章介紹了一個名為AskFaceEdge的靜態方法,用于處理3D建模中的邊緣曲線生成。該方法通過NX Open API調用,主要功能是獲取指定面的邊緣并生成相應的曲線。方法接收兩個參數:faceTag(面標簽)和curveLoop(曲線…

設計模式筆記_創建型_工廠模式

1. 工廠模式簡介 工廠模式是一種創建型設計模式,主要用于創建對象實例。 它通過定義一個接口或抽象類來創建對象,而不是直接實例化具體類,從而將對象的創建過程與使用過程分離。 工廠模式通常分為兩種類型: 簡單工廠模式&#x…

2025.6.16總結

工作:今天閉環了個遺留問題。在做專項評估時寫得太簡單,這讓測試經理質疑你的測試質量。如果換位思考,你是測試經理,你該怎么去把握風險和保證產品的質量,就知道寫得太簡單,沒有可信度。 找開發看了下后臺…

記錄:安裝VMware、Ubuntu、ROS2

安裝了VMware,就能夠在Windows系統裝安裝Ubuntu,使用Linux系統。安裝了Ubuntu,就能在里面安裝ROS2,之后寫代碼控制機器人兒。 安裝VMware 我安裝的是16 pro【具體是vmware16.2.4】,下載網站:VMware Works…

將后端數據轉換為docx文件

使用docx npm install docx 按照注釋處理數據并轉換為對應的bolb數據流 <template><Button type"primary" click"handleDocxCreate">{{buttonTitle || "報告生成"}}</Button> </template><script> import {Doc…

數據結構排序算法合集

快排 private static void quickSort(int[] ret) { quick(ret,0,ret.length-1); } private static void quick(int[] ret, int left, int right) { if(left>right) 記一下這里是大于等于 return; int pivot partition(ret,left,right); quick(ret…

【算法筆記】紅黑樹插入操作

紅黑樹插入與調整詳解 一、紅黑樹的五大性質 紅黑樹是一種自平衡的二叉搜索樹&#xff08;BST&#xff09;&#xff0c;其核心特性如下&#xff1a; 顏色屬性&#xff1a;每個節點非紅即黑根屬性&#xff1a;根節點必須為黑色葉子屬性&#xff1a;所有的 NIL 葉子節點都是黑…

認知計算革命:從算法創新到產業落地的AI專業核心應用全景

??一、自動化機器學習&#xff08;AutoML&#xff09;?? ??技術機理與產業實踐深度剖析?? ??神經網絡架構搜索&#xff08;NAS&#xff09;?? 強化學習方案&#xff1a;Google Brain的NASNet采用策略梯度優化卷積單元進化算法方案&#xff1a;DeepMind的AmeobaNe…

篇章十 論壇系統——業務開發——板塊和帖子

目錄 1.板塊 1.1 思路 1.2 實現邏輯 1.3 參數要求 1.4 實現步驟 1.Mapper.xml 2.Mapper.java 3.Service接口 4.Service實現 5.單元測試 6.Controller 7.測試API 8.前后端交互 2.帖子 1.1思路?編輯 1.2 參數要求 ?編輯 1.3 實現步驟 1.Mapper.xml 2.Mapper…

React Native 上線前的準備與企業實戰經驗總結

上線前的準備與企業實戰經驗總結 關鍵要點 熱更新簡化部署&#xff1a;CodePush 和 Expo OTA 允許快速推送 JavaScript 和資源更新&#xff0c;繞過應用商店審核&#xff0c;適合修復 Bug 或小規模功能迭代。監控與分析提升質量&#xff1a;Sentry 提供實時錯誤跟蹤&#xff…

【AI時代速通QT】第一節:C++ Qt 簡介與環境安裝

目錄 前言 一、為什么是 Qt&#xff1f;—— C 開發者的必備技能 二、Qt 的核心魅力&#xff1a;不止于跨平臺 2.1 優雅之一&#xff1a;代碼隔離&#xff0c;清晰明了 2.2 優雅之二&#xff1a;信號與槽&#xff08;Signal & Slot&#xff09;機制 2.3 優雅之三&…

pandas學習筆記

前言 總結才是知識&#xff0c;作者習慣不好&#xff0c;不會總結&#xff0c;導致函數一旦不使用就會忘記怎么使用&#xff0c;特此寫了本文&#xff0c;用于給自己一個復習的資料. 提示&#xff1a;如果你是小白&#xff0c;每個代碼請自己敲打。 一 pandas的介紹 Pandas is…

算法題(力扣每日一題)—改變一個整數能得到的最大差值

給你一個整數 num 。你可以對它進行以下步驟共計 兩次&#xff1a; 選擇一個數字 x (0 < x < 9). 選擇另一個數字 y (0 < y < 9) 。 數字 y 可以等于 x 。 將 num中所有出現 x 的數位都用 y 替換。 令兩次對 num 的操作得到的結果分別為 a 和 b 。 請你返回 a 和 b…

Kubernetes筆記

1.簡介 Kubernetes的本質是一組服務器集群&#xff0c;它可以在集群的每個節點上運行特定的程序&#xff0c;來對節點中的容器進行管理。目的是實現資源管理的自動化&#xff0c;主要提供了如下的主要功能&#xff1a; 自我修復&#xff1a;一旦某一個容器崩潰&#xff0c;能夠…

Flutter——數據庫Drift開發詳細教程(八)

目錄 自定義 SQL 類型定義類型使用自定義類型在 Dart 中在 SQL 中 方言意識支持的 SQLite 擴展json1fts5地緣壟斷 自定義 SQL 類型 Drift 的核心庫主要以 SQLite3 為目標平臺編寫。這體現在Drift 開箱即用的SQL 類型上——這些類型由 SQLite3 支持&#xff0c;并新增了一些由 …

安卓遠控工具 CRaxsRat v7.6 安裝與使用教程(僅供合法測試學習)

在當今的信息安全領域&#xff0c;移動設備已成為重點關注對象。本文將介紹一款用于遠程管理與教學研究的工具 —— CRaxsRat v7.6&#xff0c;并詳細講解其安裝與使用流程。本教程僅供網絡安全愛好者在合法授權環境下學習使用&#xff0c;嚴禁任何非法用途。 &#x1f50d; 一…

容器的本質是進程

前言 Linux 容器的本質&#xff0c;是一個被隔離和限制的進程。 與虛擬機不同&#xff0c;容器無需虛擬化一個完整的操作系統&#xff0c;所以它比虛擬機更輕量級&#xff0c;效率也更高。 Linux 容器通過 namespaces 技術來隔離容器的視圖&#xff0c;使得容器進程只能看到…

LeetCode 第75題:顏色分類

給定一個包含紅色、白色和藍色、共n個元素的數組nums&#xff0c;原地對它們進行排序&#xff0c;使得相同顏色的元素相鄰&#xff0c;并按照紅色、白色、藍色順序排序。 使用整數0、1和2分布表示紅色、白色和藍色。 必須在不使用庫內置sort函數的情況下解決這個問題。 示例1&a…