2013-01-05 4 views
8

Id aiment pour calculer la moyenne et écart-type à partir d'une trame de données avec une colonne pour le paramètre et une colonne pour un identificateur de groupe. Comment puis-je les calculer en utilisant tapply? Je pourrais utiliser sd(v1, group, na.rm=TRUE), mais ne peux pas répondre à la na.rm=TRUE dans la déclaration lors de l'utilisation tapply. omit.na n'est pas une option. J'ai tout un tas de paramètres et je dois les parcourir étape par étape sans perdre la moitié de l'espace de données en excluant toutes les lignes avec une valeur manquante.Comment passer na.rm comme argument à tapply?

data("weightgain", package = "HSAUR") 
tapply(weightgain$weightgain, list(weightgain$source, weightgain$type), mean) 

est de même pour la déclaration by.

x<-c(1,2,3,4,5,6,7,8,9,NA) 
y<-c(2,3,NA,3,4,NA,2,3,NA,2) 
group<-rep((factor(LETTERS[1:2])),5) 
df<-data.frame(x,y,group) 
df 

by(df$x,df$group,summary) 
by(df$x,df$group,mean) 

sd(df$x) #result: NA 
sd(df$x, na.rm=TRUE) #result: 2.738613 

Des idées pour y arriver?

+0

Quasiment! Puis-je l'appliquer à plusieurs colonnes de la table ou devrais-je faire défiler une liste de paramètres? 'Tapply (df [c ("x", "y")], df groupe $, sd, na.rm = TRUE)' ou si? – Doc

+2

La question n'a pas de sens. Avec 'help (tapply)' vous devriez voir qu'il y a un argument '...' qui est décrit comme offrant une promesse que les éléments nommés seront passés à la fonction FUN. Quelle est l'erreur avez-vous lorsque vous avez utilisé le code: 'tapply (df V1 $, df groupe $, sd, na.rm = TRUE)' –

Répondre

5

Je pense que cela devrait faire ce que vous voulez.

  1. Sélectionnez les colonnes que vous voulez:

    v = c("x", "y")#or 
    v = colnames(df)[1:2] 
    
  2. Utilisez sapply itérer sur v et transmettre les valeurs à tapply:

    sapply(v, function(i) tapply(df[[i]], df$group, sd, na.rm=TRUE)) 
    
13

simplement mis na.rm=TRUE dans le tapply fonction:

tapply(weightgain$weightgain, list(weightgain$source, weightgain$type), mean, na.rm=TRUE) 
+0

Cela devrait être la réponse acceptée. – Ben

+0

Je suis d'accord. La réponse acceptée semble plus compliquée, et celle-ci a fonctionné comme un charme. –

Questions connexes