Comment appliquer une fonction à chaque ligne d’une matrice ou d’un bloc de données dans R
Vous pouvez utiliser la fonction apply() pour appliquer une fonction à chaque ligne d’une matrice ou d’un bloc de données dans R.
Cette fonction utilise la syntaxe de base suivante :
appliquer (X, MARGE, FUN)
où:
- X : Nom de la matrice ou du bloc de données.
- MARGE : Dimension sur laquelle effectuer l’opération. Utilisez 1 pour la ligne, 2 pour la colonne.
- FUN : La fonction à appliquer.
Les exemples suivants montrent comment utiliser cette syntaxe dans la pratique.
Exemple 1 : appliquer une fonction à chaque ligne de la matrice
Supposons que nous ayons la matrice suivante dans R :
#create matrix mat <- matrix(1:15, nrow=3) #view matrix mat [,1] [,2] [,3] [,4] [,5] [1,] 1 4 7 10 13 [2,] 2 5 8 11 14 [3,] 3 6 9 12 15
Nous pouvons utiliser la fonction apply() pour appliquer différentes fonctions aux lignes de la matrice :
#find mean of each row apply(mat, 1, mean) [1] 7 8 9 #find sum of each row apply(mat, 1, sum) [1] 35 40 45 #find standard deviation of each row apply(mat, 1, sd) [1] 4.743416 4.743416 4.743416 #multiply the value in each row by 2 (using t() to transpose the results) t(apply(mat, 1, function(x) x * 2)) [,1] [,2] [,3] [,4] [,5] [1,] 2 8 14 20 26 [2,] 4 10 16 22 28 [3,] 6 12 18 24 30 #normalize every row to 1 (using t() to transpose the results) t(apply(mat, 1, function(x) x / sum(x) )) [,1] [,2] [,3] [,4] [,5] [1,] 0.02857143 0.1142857 0.2 0.2857143 0.3714286 [2,] 0.05000000 0.1250000 0.2 0.2750000 0.3500000 [3,] 0.06666667 0.1333333 0.2 0.2666667 0.3333333
Notez que si vous souhaitez trouver la moyenne ou la somme de chaque ligne, il est plus rapide d’utiliser les fonctions intégrées rowMeans() ou rowSums() :
#find mean of each row rowMeans(mat) [1] 7 8 9 #find sum of each row rowSums(mat) [1] 35 40 45
Exemple 2 : appliquer une fonction à chaque ligne du bloc de données
Supposons que nous ayons la matrice suivante dans R :
#create data frame df <- data.frame(var1=1:3, var2=4:6, var3=7:9, var4=10:12, var5=13:15) #view data frame df var1 var2 var3 var4 var5 1 1 4 7 10 13 2 2 5 8 11 14 3 3 6 9 12 15
Nous pouvons utiliser la fonction apply() pour appliquer différentes fonctions aux lignes du bloc de données :
#find mean of each row apply(df, 1, mean) [1] 7 8 9 #find sum of each row apply(df, 1, sum) [1] 35 40 45 #find standard deviation of each row apply(df, 1, sd) [1] 4.743416 4.743416 4.743416 #multiply the value in each row by 2 (using t() to transpose the results) t(apply(df, 1, function(x) x * 2)) var1 var2 var3 var4 var5 [1,] 2 8 14 20 26 [2,] 4 10 16 22 28 [3,] 6 12 18 24 30 #normalize every row to 1 (using t() to transpose the results) t(apply(df, 1, function(x) x / sum(x) )) var1 var2 var3 var4 var5 [1,] 0.02857143 0.1142857 0.2 0.2857143 0.3714286 [2,] 0.05000000 0.1250000 0.2 0.2750000 0.3500000 [3,] 0.06666667 0.1333333 0.2 0.2666667 0.3333333
Semblable aux matrices, si vous souhaitez trouver la moyenne ou la somme de chaque ligne, il est plus rapide d’utiliser les fonctions intégrées rowMeans() ou rowSums() :
#find mean of each row rowMeans(df) [1] 7 8 9 #find sum of each row rowSums(df) [1] 35 40 45
Ressources additionnelles
Comment récupérer les numéros de ligne dans R
Comment exécuter une fonction COUNTIF dans R
Comment exécuter une fonction SUMIF dans R