我想在R或Linux中完成这项工作:
我有一个文本格式的矩阵。在此表中,行包含SNP,列包含样本,其中包含基因型和未测量数据(A / A,C / T,0/0)。
我想找到20%样本中调用的变体(即:找到每行中20%样本中观察到的基因型(对于每个SNP),除了0/0)。
A B C D
1:14773 0/0 0/0 0/0 0/0
1:14907 A/G A/G A/A A/C
1:14930 A/G A/T A/G A/G
1:14933 G/A 0/0 0/0 G/A
1:14948 0/0 0/0 0/0 0/0
答案 0 :(得分:0)
试试这个:
#dummy data
df <- read.table(text=" A B C D
1:14773 0/0 0/0 0/0 0/0
1:14907 A/G A/G A/A A/C
1:14930 A/G A/T A/G A/G
1:14933 G/A 0/0 0/0 G/A
1:14948 0/0 0/0 0/0 0/0")
#get SNPs with at least 20% call
rownames(df)[rowSums(df != "0/0")/ncol(df) > 0.2]
# output
# [1] "1:14907" "1:14930" "1:14933"
#get frequency for each genotype
sapply(unique(c(t(df))), function(i){
rowSums(df == i) / ncol(df)
})
# output
# 0/0 A/G A/A A/C A/T G/A
# 1:14773 1.0 0.00 0.00 0.00 0.00 0.0
# 1:14907 0.0 0.50 0.25 0.25 0.00 0.0
# 1:14930 0.0 0.75 0.00 0.00 0.25 0.0
# 1:14933 0.5 0.00 0.00 0.00 0.00 0.5
# 1:14948 1.0 0.00 0.00 0.00 0.00 0.0