2011-05-27 7 views
1

Merci pour les articles précédents et les réponses professionnelles. Je peux presque faire mon analyse, sauf ces conditions avec NA. Voici mon data.frame et le code utilisé. Pourriez-vous m'apprendre à résoudre le problème lorsque la condition contient une valeur NA?R: signifie quand les conditions sont nécéssaires

df1 <- data.frame(A = c(1,2,4, 5), B=c(1,3,NA,1), C=c(1,1,3, NA), D=c(1,1,2,2)) 

En utilisant ce code, je reçois DF1 comme suit:

A B C D 
1 1 1 1 1 
2 2 3 1 1 
3 4 NA 3 2 
4 5 1 NA 2 

Avec l'aide de Andrie, Sacha Epskamp et Chase (R: get average column A based on a range of values in column B), je suis arrivé des valeurs moyennes de A quand D est compris entre 1 et 3, soit 2 dans ce cas, avec ce code. J'ai obtenu ma réponse en tant que 4.5 comme prévu (moyenne de 4 et 5 dans la colonne A). Cependant, lorsque je remplace la colonne D à la colonne C, qui contient NA. Ma réponse pourrait seulement être NA. alors que je me attendais à voir la réponse à la moyenne 1 et 2, en négligeant la 3e rangée (supérieure à 2) et la 4ème ligne (avec NA) dans la colonne C.

mean(df1$A[df1$C>0 & df1$C<2]) 

R> NA (i expect the count to be 1.5) 

Je sais na.omit pouvez supprimer tous les lignes avec na dans les entrées de df1. Cependant, je préfère ne pas le faire, car je voudrais aussi obtenir la moyenne et compte pour toutes les colonnes, quand l'entrée d'une colonne est NA. (Par exemple, je veux aussi faire une analyse moyenne (df1 $ A, [is.na (df1 $ C)])

J'ai également essayé de tester en utilisant na.rm=T dans la partie condition, mais R ne l'a pas reconnu, comme maintenant la NA est dans la partie de l'état Par exemple:.

mean(df1$A[df1$C>0 & df1$C<2, na.rm=T]) 

Error in df1$A[df1$C > 0 & df1$C < 2, na.rm = T] : 
    incorrect number of dimensions 

Je crois qu'il ya plus intelligente de le faire Pls aimablement des conseils

+0

double possible de [script R - retirer les valeurs de NA à partir d'un vecteur] (http://stackoverflow.com/questions/7706876/r-script-removing-na-values-from-a-vector) –

Répondre

10

la raison pour laquelle vous obtenez une erreur indiquant un nombre incorrect de dimensions.. était parce que na.rm = TRUE était à l'intérieur des crochets, donc R interprétait cela comme étant la 3ème dimension d'un objet tel qu'un dataframe, une matrice, etc. = VRAI est placé à l'extérieur, ça fonctionne bien.

mean(df1$A[df1$C>0 & df1$C<2],na.rm=TRUE) 

[1] 1.5 
Questions connexes