J'essaie de créer un nouveau vecteur qui est la somme de 35 autres vecteurs. Le problème est qu'il y a beaucoup de valeurs NA, mais pour cette utilisation particulière, je veux traiter ceux comme des zéros. L'ajout de vecteurs ne fonctionnera pas, car si l'un des 35 vecteurs contient un Na, le résultat est Na. Voici l'exemple du problème:
col1<-c(NA,1,2,3)
col2<-c(1,2,3,NA)
col3<-c(NA,NA,2,3)
Sum<-col1+col2+col3
Sum
# [1] NA NA 7 NA
Je veux que le résultat soit 1, 3, 7, 6.
[.____] Je suppose que je pourrais créer de nouvelles versions de chacun des vecteurs dans lesquels je remplace le Na avec un 0, mais ce serait beaucoup de travail lorsqu'il est appliqué à 35 vecteurs. Y a-t-il une seule fonction qui m'aidera?
Aurait également pu utiliser la fonction rowSums
:
rowSums( cbind (col1,col2,col3), na.rm=TRUE)
#[1] 1 3 7 6
?rowSums # also has colSums described on same help page
Mettez-les dans une matrice en premier:
apply(cbind(col1,col2,col3),1,sum,na.rm = TRUE)
[1] 1 3 7 6
Vous pouvez lire sur chaque fonction ici utilisant la documentation intégrée de R: ?apply
, ?cbind
.
cbind
signifie "Colonne Bind": il prend plusieurs vecteurs ou tableaux et les lie "par colonne" dans un seul tableau:
cbind(col1,col2,col3)
col1 col2 col3
[1,] NA 1 NA
[2,] 1 2 NA
[3,] 2 3 2
[4,] 3 NA 3
apply
, eh bien, s'applique une fonction (sum
dans ce cas) aux lignes ou aux colonnes d'une matrice. Cela nous permet d'utiliser le na.rm = TRUE
argument à sum
afin que les valeurs NA soient supprimées.