次のような一連の遺伝子 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