分享

Excel的SNP数据变为plink格式的数据--代码分享

 育种数据分析 2022-05-23 发布于河南

最近,星球内有位老师问了一个问题,之前我写了一篇博客(Excel格式的SNP数据怎么变为plink格式),老师说他的数据和我的一样,却报错了:

世界上有很多报错,我不为之操心,但是我的代码报错了,我就要负责到底。于是我问老师要来示例数据,测试了一下。示例数据是这样的:

我把它放到了D盘,然后运行我的代码:

setwd("D:/")library(openxlsx)library(tidyverse)library(data.table)
dat = read.xlsx("SNP.xlsx")dat
map = dat %>% select(2,1,x = 3,p = 3)head(map)
ped = dat %>% select(-c(1:4)) %>% t() %>% as.data.frame() %>% mutate(ID = rownames(ped)) %>% mutate(x3=0,x4=0,x5=0,x6=0) %>% select(FID=ID,IID=ID,x3,x4,x5,x6,everything())ped[1:10,1:10]

报错了:

好吧,我的代码真的有问题,于是我开始查找问题,发现代码是到这一步报错的:

 dat %>% select(-c(1:4)) %>% t() %>% as.data.frame() %>%   mutate(ID = rownames(ped))

很明显,是因为没有ped这个对象。所以,代码有错误,不要用ped,要用点号.来表示数据的对象传参。

所以完整的代码是:

setwd("D:/")library(openxlsx)library(tidyverse)library(data.table)
dat = read.xlsx("SNP.xlsx")dat
map = dat %>% select(2,1,x = 3,p = 3)head(map)
ped = dat %>% select(-c(1:4)) %>% t() %>% as.data.frame() %>% mutate(ID = rownames(.)) %>% mutate(x3=0,x4=0,x5=0,x6=0) %>% select(FID=ID,IID=ID,x3,x4,x5,x6,everything())ped[1:10,1:10]fwrite(map, "file.map",col.names = F,quote = F,sep = " ")fwrite(ped, "file.ped",col.names = F,quote = F,sep = " ",na = "##")

然后结果我保存为file的plink文件,注意,这里的缺失值是##,所以我们需要替换为00,在git终端下运行sed命令:

 sed -i 's/##/00/g' file.ped

查看plink的ped文件和map文件:(注意,我这里用cat是因为数据少,多的话,用less -S)

用plink命令测试一下,文件是否正确:

 plink --file file --missing

结果没问题:

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多