我有一个类似于这个的表,并且想计算 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
功能,我在这里做错了什么。