2011-01-18 8 views
2

Je suis nouveau à R et je reçois des résultats inattendus en utilisant la fonction ifelse(). Voici un exemple. Voici un sous-ensemble de la base de données avec laquelle je travaille. Après la dernière commande, pourquoi la colonne exemple $ Points contient-elle 12 au lieu de 2? J'ai essayé ceci pour de nombreuses valeurs différentes de l'exemple $ Value et le résultat est toujours 10 de plus que ce à quoi je m'attendais.R Question: ifelse produisant des résultats inattendus

Exemple:

example 
    Question StudentID SchoolID Value Worth Answer Points 
2926  18 101290 84386  2  2  Co  0 
2927  18 100878 84386  2  2  Co  0 
2928  18 100895 84386  1  5  Co  0 
2929  18 100913 84386  2  2  Co  0 
2930  18 100884 84386  2  2  Co  0 
example$Points <- ifelse(example$Answer == "Co", example$Value, example$Points) 
example 
    Question StudentID SchoolID Value Worth Answer Points 
2926  18 101290 84386  2  2  Co  12 
2927  18 100878 84386  2  2  Co  12 
2928  18 100895 84386  1  5  Co  11 
2929  18 100913 84386  2  2  Co  12 
2930  18 100884 84386  2  2  Co  12 

J'utilise le travail autour d'un peu puis en soustrayant 10 de la colonne, mais je voudrais éviter cela et aller au fond de ce qui se passe ici.

Toute aide serait grandement apprécié. Je vous remercie!

+4

Pouvez-vous fournir la sortie de str (par exemple) '' ou dput (par exemple [2926: 2930,]) '? –

+0

Pouvez-vous essayer cela dans une session R propre? J'obtiens le résultat désiré quand j'essaye votre code. N'appelez pas la trame de données 'example' car c'est une fonction R; essayez un nom différent. Vous pouvez également simplifier le code pour utiliser 'within()'; si j'ai vos données dans la trame de données 'DF',' DF <- dedans (DF, Points <- ifelse (Réponse == "Co", Valeur, Points)) 'fera la même chose que votre code sans avoir à répéter tout les bits 'DF $' ('exmaple $' dans votre cas). –

Répondre

7

Je pense que example$Value est un facteur et vous obtenez les codes sous-jacents à la place des étiquettes. Je vous recommande de jeter un coup d'œil à vos données dès qu'elles sont lues dans R pour voir ce qui cause que votre méthode de saisie traite ces valeurs comme des facteurs au lieu de nombre entier/numérique.

+0

Oui, vous avez raison, ce sont des facteurs. Cela répond à ma question. Je vous remercie! –

2

Je ne sais pas, parce que quand je lance cela sur ma machine, je reçois la bonne réponse:

> print(example) 
    Question StudentID SchoolID Value Worth Answer Points 
1  18 101290 84386  2  2  Co  0 
2  18 100878 84386  2  2  Co  0 
3  18 100895 84386  1  5  Co  0 
4  18 100913 84386  2  2  Co  0 
5  18 100884 84386  2  2  Co  0 
> 
> example$Points <- ifelse(example$Answer == "Co", example$Value, example$Points) 
> 
> print(example) 
    Question StudentID SchoolID Value Worth Answer Points 
1  18 101290 84386  2  2  Co  2 
2  18 100878 84386  2  2  Co  2 
3  18 100895 84386  1  5  Co  1 
4  18 100913 84386  2  2  Co  2 
5  18 100884 84386  2  2  Co  2 

Voici le code que j'utilise:

example = read.table('data.txt', header = T) 
print(example) 
example$Points <- ifelse(example$Answer == "Co", example$Value, example$Points) 
print(example) 

est ici donnees.txt :

Question StudentID SchoolID Value Worth Answer Points 
18 101290 84386  2  2  Co  0 
18 100878 84386  2  2  Co  0 
18 100895 84386  1  5  Co  0 
18 100913 84386  2  2  Co  0 
18 100884 84386  2  2  Co  0 

Espérons que cela aide. Que se passe-t-il lorsque vous imprimez le type d'exemple $ Value? Essayez ceci:

print(typeof(example$Value)) 
[1] "integer" 

Si cela ressort comme un facteur, alors cela pourrait expliquer vos résultats étranges.

Questions connexes