我有一组遗传 SNP 数据,如下所示:
Founder1 Founder2 Founder3 Founder4 Founder5 Founder6 Founder7 Founder8 Sample1 Sample2 Sample3 Sample...
A A A T T T T T A T A T
A A A T T T T T A T A T
A A A T T T T T A T A T
A A A T T T T T A T A T
A A A T T T T T A T A T
A A A T T T T T A T A T
A A A T T T T T A T A T
A A A T T T T T A T A T
A A A T T T T T A T A T
A A A T T T T T A T A T
A A A T T T T T A T A T
A A A T T T T T A T A T
矩阵的大小为 56 列 x 46482 行。我需要首先将矩阵按每 20 行进行一次分类,然后将前 8 列(创始人)中的每一列(创始人)与每列 9-56 进行比较,并将匹配字母/等位基因的总数除以总行数(20)。最终我需要 48 个 8 列 x 2342 行矩阵,它们本质上是相似矩阵。我试图通过以下方式分别提取每一对:
"length(cbind(odd[,9],odd[,1])[cbind(odd[,9],cbind(odd[,9],odd[,1])[,1])[,1]=="T" & cbind(odd[,9],odd[,1])[,2]=="T",])/nrow(cbind(odd[,9],odd[,1]))"
但这远非高效,而且我不知道将函数应用于每 20 行和多对的更快方法。
在上面给出的示例中,如果行全部相同,如跨 20 行所示,则 Sample1 矩阵的第一行将是:
1 1 1 0 0 0 0