2010-03-16 3 views
3

J'ai un problème où je dois ajouter trente-trois vecteurs entiers de longueur égale d'un ensemble de données dans R. Je sais que la solution simple seraitAjout de plusieurs vecteurs de R

Vector1 + Vector2 + Vector3 +VectorN 

Mais je suis sûr qu'il est un moyen de coder cela. De plus, certains vecteurs ont des NA à la place des entiers, j'ai donc besoin d'un moyen de les ignorer. Je sais que c'est peut-être très basique mais je suis nouveau dans ce domaine.

+0

Je recommande d'utiliser la balise '' r' plutôt que rstats' –

Répondre

6

Voici une autre façon, chutant lorsque somme NAs les vecteurs:

df <- data.frame(vector1, vector2, vector3, vector4) 
rowSums(df, na.rm=T) 
+2

Cela peut aussi faire le travail: 'appliquer (df, 1, somme, na.rm = TRUE)' – aL3xa

+0

Merci, cela a beaucoup aidé . – Elais

1

En fait, il est pas aussi facile que cela puisse paraître. Je pense que vous voulez vous débarrasser de NA et les remplacer par 0 (zéros). Une autre solution est:

# create dummy variables 
set.seed(1234) 
x <- round(rnorm(10, 15, 3.2)) 
y <- round(runif(10, 12, 27)) 
z <- round(rpois(n = 10, lambda = 5)) 
# create some NA's 
x[c(2,3)] <- NA 
y[c(1,3,7)] <- NA 
z[c(3,6,10)] <- NA 

Et maintenant, si vous le faites:

x + y + z # the result is: 
[1] NA NA NA 20 31 41 NA 39 37 25 

courir donc:

x[is.na(x)] <- 0 
y[is.na(y)] <- 0 
z[is.na(z)] <- 0 

donc:

x + y + z # yields: 
[1] 16 21 0 25 34 41 16 42 48 25 

Mais, franchement, je vous recommandons de rester avec @xie la solution de chao! C'est assez simple et direct!

0
do.call("+", list(vector1, vector2, vector3, vector4)) 
+1

cela ne fonctionne que si la liste a deux éléments; sinon il se plaint: "l'opérateur a besoin d'un ou deux arguments" – petrelharp

Questions connexes