2010-06-21 8 views
1

Ici, je suis avec une autre question de débutant.Niveaux non présents lors de la manipulation 1,0, NA

Je suis l'importation d'un fichier CSV qui ressemble à ceci:

"username","interest","has_card" 
"test01","not_interesting",1 
"test02","maybe_interesting",0 
"test03","not_interesting",0 
"test04","maybe",1 

mydata <- read.table(file("test.csv", encoding = "UTF-8"), header=TRUE, sep=",") 

Ensuite, (peut-être cela ressemble à un débutant question stupide) pourquoi je peux obtenir les niveaux pour des trucs à base de chaîne, comme ceci:

> levels(mydata$interest) 
[1] "maybe"    "maybe_interesting" "not_interesting" 

Mais pas pour les éléments binaires (entiers).

> levels(mydata$has_card) 
NULL 

Ce que je fais est un barplot pour le tableau des fréquences, j'ai besoin essentiellement de renommer les étiquettes 0,1 à quelque chose comme « Non », « Oui » dans la légende du tracé. Mais je ne peux pas faire:

levels(mydata$has_card)[1] <- "Yes" 
levels(mydata$has_card)[0] <- "No" 

Comme je le ferais avec « peut-être » « maybe_interesting » « not_interesting »

+0

j'ai réussi à réparer moi-même avec: pieds <- Table (mydata has_card de $); rownames (ft) <- c ("False", "True") Mais j'adorerais une explication pour la raison pour laquelle integer ne peut pas donner de niveaux de vous les gars sages! –

Répondre

1

Le comportement par défaut de read.table consiste à convertir les variables de caractères (qui ne sont pas converties en variables logiques, numériques ou complexes) en facteurs, cf. as.is ou stringsAsFactors dans la page d'aide:

R> class(mydata$has_card) 
[1] "integer" 
R> class(mydata$interest) 
[1] "factor" 
R> factor(mydata$has_card, labels=c("No", "Yes")) 
[1] Yes No No Yes 
Levels: No Yes 
+0

Ok, donc il se passait quelque chose derrière la scène! Je vous remercie!! –

0

Les champs numériques ne sont pas automatiquement converties en facteurs. Vous pouvez avoir besoin de les convertir explicitement en utilisant factor.

Questions connexes