SGAT丨基于R语言tidyverse的vcf转txt文件算法,SNP位点判断与自动校正,染色体格式替换

简介: SGAT丨基于R语言tidyverse的vcf转txt文件算法,SNP位点判断与自动校正,染色体格式替换

算法:vcf转txt并自动规范化

引言

vcf文件是存放基因变异信息的一种方式,本文提供一种算法,用于读取vcf文件并转换等位基因展示方法、替换染色体展示格式、以及自动识别非唯一变异并进行修改,用于对变异信息进行整理。


主要步骤与设计思路

  • 读取VCF文件并分为三部分储存
  • 提取变异信息并批量替换
  • 修改染色体格式
  • SNP位点的判断与校正
  • 单点碱基差异唯一化

项目运行环境

  • centos7 linux
  • R4.2.3

具体操作步骤

加载R包与数据

library(tidyverse)
library(vcfR)
library(do)
library(R.utils)
df <- read.table(paste0("02_ordata/",job,".filter.vcf"),header = F)
vcf <- read.vcfR(paste0("02_ordata/",job,".filter.vcf.gz"))
chr_ref <- read.table("01_scripts/chr_num2str.txt",header = T)

读取VCF文件信息

fix <- vcf@fix
gt <- vcf@gt
meta <- vcf@meta

利用vcfR包读取入VCF文件后,分别提取出不同部分存放于临时变量中,以供后续使用。

批量替换变异信息

### 批量替换“|”为“/” ==================================================================
df[df == "0|0"] = "0/0"
df[df == "1|0"] = "1/0"
df[df == "0|1"] = "0/1"
df[df == "1|1"] = "1/1"
colnames(df) <- c(colnames(fix),colnames(gt))

该步骤的目的是为了将|修改为/,这是后面转hmp格式所需的条件。

替换染色体编号

###  替换染色体 =====================================================================
for (i in 1:nrow(df)){
  old_chr <- df$CHROM[i]
  for (k in 1:nrow(chr_ref)){
    if (chr_ref$chr_str[k] == old_chr){
      new_chr <- chr_ref$chr_num[k]
      df$CHROM[i] <- new_chr
    }
  }
}

利用for循环查找逐一取出染色体元素值,然后从参考信息中查找对应的正确格式,然后赋值给染色体信息,这一步中使用的chr_ref是染色体不同格式的对应信息。

参数识别与矫正

因为有插入缺失的存在,所以参考位置和实际位置的碱基并非完全唯一且差异,这将导致后面运行出错。这里提供一个算法,批量实现对SNP位点的检测与矫正。

  • snp_reverse函数
snp_reverse <- function(one,more){
  # 输入俩参,一为单二为多,返回存在于多但不与单同之值
  list_snp <- str_split(more,"")
  for (i in 1:str_length(more)){
    snp_now <- list_snp[[1]][i]
    ifelse(one==snp_now,next,return(snp_now))
  }
}

该函数输入两个参数,如“A,CATG”,首先将第二个参数分割成单个字母,然后迭代判断第一个字母是否与第二个一致,一旦出现与第一个参数不相同的值则返回该值。目的是为了让两个值长度为1且不相同。

批量处理ALT和REF位点

# 对每行的REF和ALT进行处理,将其变成不同值
for (i in 1:nrow(df)){
  ref <- df$REF[i]
  alt <- df$ALT[i]
  # 情况有三,均为单或其一为多
  if (str_length(ref) == 1){
    if (str_length(alt) == 1){
    }else{
      df$ALT[i] <- snp_reverse(ref,alt)
    }
  }else{
    if (str_length(alt) == 1){
      df$REF[i] <- snp_reverse(alt,ref)
    }else{
      print(paste0("ERROR:",df$ID[i]," this snp has more REF、ALT !"))
    }
  }
}

结果保存与输出

colnames(df)[1] <- "#CHROM"
write.table(df,paste0("03_vcf2txt/","gene_",job,".txt"),
            sep = "\t",row.names = F,col.names = T,quote = F)
print(paste0(job," Step ordata gene vcf to txt finished!"))

通过该算法能够对vcf文件进行转换,并得到规范化的txt文件,用于后续的分析。

END

© 素材来源于网络,侵权请联系后台删除

笔记合集,点击直达

相关文章
|
6月前
|
机器学习/深度学习 存储 算法
用kNN算法诊断乳腺癌--基于R语言
用kNN算法诊断乳腺癌--基于R语言
|
2月前
R语言基于表格文件的数据绘制具有多个系列的柱状图与直方图
【9月更文挑战第9天】在R语言中,利用`ggplot2`包可绘制多系列柱状图与直方图。首先读取数据文件`data.csv`,加载`ggplot2`包后,使用`ggplot`函数指定轴与填充颜色,并通过`geom_bar`或`geom_histogram`绘图。参数如`stat`, `position`, `alpha`等可根据需要调整,实现不同系列的图表展示。
|
2月前
|
机器学习/深度学习 算法 数据挖掘
R语言中的支持向量机(SVM)与K最近邻(KNN)算法实现与应用
【9月更文挑战第2天】无论是支持向量机还是K最近邻算法,都是机器学习中非常重要的分类算法。它们在R语言中的实现相对简单,但各有其优缺点和适用场景。在实际应用中,应根据数据的特性、任务的需求以及计算资源的限制来选择合适的算法。通过不断地实践和探索,我们可以更好地掌握这些算法并应用到实际的数据分析和机器学习任务中。
|
4月前
|
算法
Ngnix02 --- Ngnix的功能特性及常见功能,Ngnix常用的功能模块,有不同算法,根据不同算法进行转发,ip_hash、url_hash、fair,核心组成 ngnix二进制可执行文件
Ngnix02 --- Ngnix的功能特性及常见功能,Ngnix常用的功能模块,有不同算法,根据不同算法进行转发,ip_hash、url_hash、fair,核心组成 ngnix二进制可执行文件
|
5月前
|
Python
R语言遍历文件夹求取其中所有栅格文件的平均值
通过NAvalue(tif_file_all) <- -10000这句代码,将值为-10000的像元作为NoData值的像元,防止后期计算平均值时对结果加以干扰。   接下来,我们通过file.path()函数配置一下输出结果的路径——其中,结果遥感影像文件的名称就可以直接以其所对应的条带号来设置,并在条带号后添加一个_mean后缀,表明这个是平均值的结果图像;但此外,这个仅仅是文件的名字,还需要将文件名与路径拼接在一起,才可以成为完整的保存路径,因此需要用到file.path()函数。最后,将结果图像通过writeRaster()函数加以保存即可,这句代码的解释大家同样参考R语言求取大量遥感
181 0
|
6月前
|
算法 项目管理
R语言实现蒙特卡洛模拟算法
R语言实现蒙特卡洛模拟算法
|
6月前
|
算法 搜索推荐
R语言混合SVD模型IBCF协同过滤推荐算法研究——以母婴购物平台为例
R语言混合SVD模型IBCF协同过滤推荐算法研究——以母婴购物平台为例
|
6月前
|
存储 机器学习/深度学习 算法
R语言贝叶斯Metropolis-Hastings采样 MCMC算法理解和应用可视化案例
R语言贝叶斯Metropolis-Hastings采样 MCMC算法理解和应用可视化案例
|
6月前
|
算法 TensorFlow 算法框架/工具
基于直方图的图像阈值计算和分割算法FPGA实现,包含tb测试文件和MATLAB辅助验证
这是一个关于图像处理的算法实现摘要,主要包括四部分:展示了四张算法运行的效果图;提到了使用的软件版本为VIVADO 2019.2和matlab 2022a;介绍了算法理论,即基于直方图的图像阈值分割,通过灰度直方图分布选取阈值来区分图像区域;并提供了部分Verilog代码,该代码读取图像数据,进行处理,并输出结果到&quot;result.txt&quot;以供MATLAB显示图像分割效果。
|
6月前
|
算法 数据可视化 数据挖掘
R语言平滑算法LOESS局部加权回归、三次样条、变化点检测拟合电视节目《白宫风云》在线收视率
R语言平滑算法LOESS局部加权回归、三次样条、变化点检测拟合电视节目《白宫风云》在线收视率
下一篇
无影云桌面