je un tableau similaire à celui-ci, et souhaite calculer le rapport entre la colonne A et B par exemple:calcul de ratios et les mettre dans une matrice en R
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
Je veux créer une nouvelle matrice qui a toutes les lignes précédentes que de nouvelles lignes et de colonnes (15 lignes et 15 colonnes) comme si (valeurs entre parenthèses sont des espaces réservés pour les ratios calculés):
[,1] [,2] [,3] [,4]
[1,] (A1:B1) (A1:B2) (A1:B3) (A1:B4) ...
[2,]
[3,]
[4,]
...
C'est peut-être pas le meilleur exemple, mais je J'espère que ce n'est pas confus. Pour calculer les rapports A1: B1, A2: B2, A3: B3 je pouvais faire quelque chose comme
data.matrix(data["A"]/data["B"])
Et de le faire pour tout, je ferais quelque chose comme
data.matrix(data[1,]/data[1,1])
data.matrix(data[1,]/data[1,2])
...
et ainsi de suite . Cela semble être beaucoup de travail et peut-être quelqu'un connaît une méthode plus rapide et plus efficace
EDIT
Je pensais que la fonction Combn fonctionnerait, mais je compris qu'il ne fonctionne pas. Lorsque j'ai une matrice de la colonne 2, par exemple
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
J'utiliser la fonction combn
pour calculer tous les rapports possibles (A1: B1, A1: B2, ... A2: B1, A2 B2 ...) Je viens d'obtenir le résultat de A1 vs toutes les valeurs de 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
Ou peut-être que je ne comprends pas la fonction combn
et je suis en train de faire quelque chose de mal ici ...
Que faut-il attendre du résultat de ces deux colonnes? les rapports sont «A1: B1», «A2: B2» dans une seule colonne est le résultat pour le moment. – mnel
Voulez-vous A1: B1, A1: B2 ... comme première rangée, puis A2: B1, A2: B2, .. comme deuxième rangée et ainsi de suite? –
oui, exactement comme ça –