2017-10-15 83 views
0

我有这个CSV数据集,我需要创建一个函数来执行数据清理,但仍然无法正常工作,而且我的想法已经过时。数据清理和表中的拼写错误

以下是Google云端硬盘上的dataset

这是我需要做的:

  • 纠正可能的输入
  • 删除不相关的数据(仅在奥克兰和惠灵顿的房屋被认为是)
  • 删除离群值,例如负值区,负功耗,非常高的地区,非常高的功率消耗

到目前为止,这是我做的代码:

# 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), ] 

后,我运行此代码,拼错的单词(“阿克兰“)不会像我预期的那样改变为奥克兰。 这突出显示的行如在此图像中应该改变奥克兰: enter image description here

+0

问题寻求帮助调试(“为什么不是这个代码的工作?”)必须包括所期望的行为,一个特定的问题或错误,并重现它在问题本身所需要的最短的代码。没有明确问题陈述的问题对其他读者无益。请参阅:如何创建最小,完整和可验证示例。 –

+0

查看函数'?droplevels'。 –

+0

@MarcusMüller我希望我上传能给什么,我期待 – Nelson

回答

2

为了解决您的问题倒塌因子水平“阿克兰”和“奥克兰”(也假设你想要权力$市是/仍然是一个因子):

一种方法是将levels()函数传递给一个命名列表,每个名称都是所需级别的正确标签(在您的情况下,数据集中城市的正确名称)请参阅: Cleaning up factor levels (collapsing multiple levels/labels)作为一个例子。

然而,正如抬起头,看在你的数据集的阿克兰和奥克兰字符串后面的额外空间:

# 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" 

传递命名列表的水平()的作品,一旦你占了空间:

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" 

你现在有3个级别,而不是4,注意这水平还拿了空间的护理标签

子集只包括relevan牛逼城市

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

你也可以子集,以排除负值,极值等..

注:这里我唯一真正的贡献是捕捉多余的空格,来解决自己我发现Aaron's类似的问题答案非常有帮助。希望这可以帮助!

+0

是的额外的空间是这个问题的根本问题之一 – Nelson