2017-10-15 11 views
0

J'ai ce jeu de données CSV et j'ai besoin de créer une fonction pour effectuer le nettoyage des données, mais ne fonctionne toujours pas et je suis à court d'idée. Il s'agit du dataset sur Google Drive.Nettoyage des données et des mots mal orthographiés dans un tableau

Voici ce que je dois faire:

  • Correction des fautes de frappe possibles
  • Suppression des données non pertinentes (uniquement des maisons à Auckland et Wellington sont considérés)
  • aberrantes Enlever, par exemple zone négative, les consommations d'énergie négative, les zones très élevées, les consommations de puissance très élevée

Jusqu'à présent, c'est le code que je l'ai fait:

# Reading data set 
installed.packages("lubridate") 
library(lubridate) 

# Reading data set 
power <- read.csv("data set 6.csv", na.strings="") 

# SUBSETTING 
Area <- as.numeric(power$Area) 
City <- as.character(power$City) 
P.Winter <- as.numeric(power$P.Winter) 
P.Summer <- as.numeric(power$P.Summer) 

#Data Cleaning 
levels(power$City) <- c(levels(power$City), "Auckland") 
power$City[power$City == "Ackland"] <- "Auckland" 

#Removing irrelevant data (only houses in Auckland and Wellington are considered) 
power$City <- power$City[-c(496,499), ] 

Après avoir exécuter ce code, les mots mal orthographiés ("Ackland ") ne change pas à Auckland comme je m'y attendais. Cela mettait en lumière la ligne comme le montre cette image est censée passer à Auckland: enter image description here

+0

Les questions qui cherchent une aide au débogage («pourquoi ce code ne fonctionne-t-il pas?») Doivent inclure le comportement souhaité, un problème ou une erreur spécifique et le code le plus court nécessaire pour le reproduire dans la question. Les questions sans énoncé de problème clair ne sont pas utiles aux autres lecteurs. Voir: Comment créer un exemple minimal, complet et vérifiable. –

+0

Voir la fonction '? Droplevels'. –

+0

@ MarcusMüller J'espère que l'image que j'ai téléchargé pourrait donner une idée de ce que j'attends – Nelson

Répondre

2

Pour répondre à votre question effondrement facteur de Ackland »et « Auckland »(et en supposant aussi des niveaux que vous voulez pouvoir City $ pour être/rester factor):

Une méthode consiste à transmettre à la fonction levels() une liste nommée, chaque nom étant les étiquettes correctes des niveaux souhaités (dans votre cas, les noms corrects des villes de votre fichier) voir: Cleaning up factor levels (collapsing multiple levels/labels) pour un exemple général.

Cependant, tout comme un heads-up, regarder l'espace supplémentaire derrière les chaînes de caractères Ackland et Auckland dans votre ensemble de données:

# first view classes to confirm power$City is a factor 
    > apply(power, class)  # --> or is.factor(power$City) will work to 
     Area  City P.Winter P.Summer 
    "numeric" "factor" "numeric" "numeric" 

    # Notice spaces behind "Ackland " and "Auckland " 
    > levels(power$City) 
    [1] "Ackland " "Auckland " "Sydney"  "Wellington" 

Passer une liste nommée à des niveaux() fonctionne une fois que vous rendre compte de la espaces:

levels(power$City) <- list(Auckland = c("Ackland ", "Auckland "), Sydney = c("Sydney"), Wellington = c("Wellington")) 

    # Now only three factor levels (notice this also took care of the extra spaces) 
     > levels(power$City) 
    [1] "Auckland" "Sydney"  "Wellington" 

Vous avez maintenant 3 niveaux au lieu de 4, le remarquer a également pris soin des espaces au niveau des étiquettes

Sous-ensemble pour inclure uniquement pertinen villes t

 subpower <- power[which(power$City == c("Auckland", "Wellington")), ] 

Vous pouvez également sous-ensemble pour exclure des valeurs négatives, les valeurs extrêmes, etc ...

Note: Ma seule contribution réelle est ici les espaces capture supplémentaires, pour lutter contre moi-même des problèmes similaires que j'ai trouvé Aaron's réponse très utile. J'espère que cela t'aides!

+0

Oui, les espaces supplémentaires étaient l'un des problèmes de base du problème – Nelson