apply
関数セットの1 つを利用して計算を行いたいと思います。
まず、2 つの行列がmat1
ありmat2
ます。
mat1
:
a b c
1 NA NA NA
2 1 1 1
3 1 1 NA
4 NA 1 NA
mat2
:
a b c
a 1.0 0.2 0.3
b -0.7 1.0 0.8
c -0.1 -0.3 1.0
mat2
ここでは無関係な関数を使用して計算されます。基本的に、データが少ない(したがって精度が低い)場合に結果にペナルティを課すmat1
重み関数を適用したいと思います。mat1
mat2
x,y
したがって、これを達成するために、 の座標についてmat2
、 の 2 つの列のペアごとの完全性を計算したいと考えていますmat1
。
例:mat2["a","b"]
またはmat2["b","a"]
(同じである必要があります) は、元の値 * ( および の完全な行/およびmat1
の合計行)になります。a
b
mat1
a
b
したがって、実際の問題は、すべての列に対してすべての列をループする行列 (二重ループ) に関数を適用し、これを重み行列に格納して別の行列に対して乗算するにはどうすればよいかということです。
rollapply
from packageを使用して、zoo
次のように2 つの行を比較できます。
rowSums(rollapply(is.na(t(mat1)), 2, function(x) !any(x)))
私は得る:
[1] 2 1
のように、a と b を比較すると 2 行が完了し、b と c を比較すると 1 行が完了します。では、a と b、a と c、b と c を比較するにはどうすればよいでしょうか。
ありがとう。