このようなテーブルがあり、列 A と B の比率を計算したいと考えています。たとえば、次のようになります。
A B C D E F
[1,] 187 174 183 115 101 104
[2,] 451 166 177 842 101 133
[3,] 727 171 187 12803 98 134
[4,] 1532 181 196 730 98 108
[5,] 4139 188 214 20358 105 159
[6,] 689 185 211 1633 110 162
[7,] 1625 184 195 2283 109 114
[8,] 771 181 190 904 105 110
[9,] 950 177 190 1033 106 112
[10,] 703 180 191 463 106 110
[11,] 2052 178 188 2585 100 105
[12,] 1161 178 187 2874 99 110
[13,] 214 175 184 173 98 110
[14,] 473 184 191 971 104 111
[15,] 756 185 193 14743 107 114
次のように、前の行をすべて新しい行と列 (15 行と 15 列) として持つ新しいマトリックスを作成したいと思います (括弧内の値は、計算された比率のプレースホルダーです)。
[,1] [,2] [,3] [,4]
[1,] (A1:B1) (A1:B2) (A1:B3) (A1:B4) ...
[2,]
[3,]
[4,]
...
これは最良の例ではないかもしれませんが、あまり混乱しないことを願っています。A1:B1、A2:B2、A3:B3 の比率を計算するには、次のようにします。
data.matrix(data["A"]/data["B"])
そして、すべての人にそれを行うには、次のようにします。
data.matrix(data[1,]/data[1,1])
data.matrix(data[1,]/data[1,2])
...
等々。これは大変な作業のようで、誰かがより迅速で効率的な方法を知っているかもしれません。
編集
この機能は機能すると思っcombn
ていましたが、そうではないことがわかりました。次のような 2 列の行列がある場合:
A B
[1,] 187 115
[2,] 451 842
[3,] 727 12803
[4,] 1532 730
[5,] 4139 20358
[6,] 689 1633
[7,] 1625 2283
[8,] 771 904
[9,] 950 1033
[10,] 703 463
[11,] 2052 2585
[12,] 1161 2874
[13,] 214 173
[14,] 473 971
[15,] 756 14743
そして、このcombn
関数を使用して、考えられるすべての比率 (A1:B1、A1:B2、... A2:B1、A2:B2...) を計算します。A1 と B のすべての値の結果だけを取得します。
> combn(ncol(data), 2, function(x) data[,x[1]]/data[,x[2]])
[,1]
[1,] 1.62608696
[2,] 0.53562945
[3,] 0.05678357
[4,] 2.09863014
[5,] 0.20331074
[6,] 0.42192284
[7,] 0.71178274
[8,] 0.85287611
[9,] 0.91965150
[10,] 1.51835853
[11,] 0.79381044
[12,] 0.40396660
[13,] 1.23699422
[14,] 0.48712667
[15,] 0.05127857
または、機能を理解していないだけで、combn
ここで何か間違ったことをしているのかもしれません。