查找并删除丢失数据超过5%的行

时间:2016-05-01 09:09:07

标签: r dataframe genetics

我有一个看起来像这样的矩阵(称为结果)

     id1 id2 id3 id4 id5 id6 id7 id8 id9
snp1  1   2   0   NA  1   1   1   2   1
snp2  2   2   2   2   0   2   NA  NA  0
snp3  NA  NA  1   NA  0   NA  NA  2   2

到目前为止,我已经删除了使用

完全填充了NA的行和列
indexsnp=apply(results,1,
function(x) length(which(is.na(x)==T)))
indexsnp=which(indexsnp==length(results[1,]))
indexsample=apply(results,2,
function(x) length(which(is.na(x)==T)))
indexsample=which(indexsample==length(results[,1]))

#get rid of indexes
results=results[-indexsnp,]
results=results[,-indexsample]

我的数据集中仍然有很多NA,所以现在我想看看哪个snp的调用率低于95%(即哪些行包含超过5%的NA),然后删除这些行。我不知道该怎么做。我试过了

snpsum.col <- col.summary(results)
library(snpStats)
call <- 0.95
use <- with(snpsum.col, (!is.na(Call.rate) & Call.rate >= call))
use[is.na(use)] <- FALSE              
cat(ncol(results)-sum(use),"SNPs will be removed due to low call  
rate.\n")
genotype <- genotype[,use]
snpsum.col <- snpsum.col[use,]

但我收到了错误

Error in col.summary(results) : not a SnpMatrix object

我还有其他办法吗?

1 个答案:

答案 0 :(得分:1)

如果m是这样的矩阵,请执行

m <- m[is.na(m)%*%rep(1,ncol(m))<=ncol(m)*0.05,]