table 中的数据清理和拼错单词
Data cleaning and misspelled words in a table
我有这个 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), ]
在我 运行 这段代码之后,拼错的单词 ("Ackland") 并没有像我预期的那样变成奥克兰。
如图所示,突出显示的行应该更改为奥克兰:
为了解决你的问题,折叠因子水平 'Ackland' 和 'Auckland'(并且假设你想要 power$City 到 be/remain 一个因子):
一种方法是向 levels() 函数传递一个命名列表,每个名称都是所需级别的正确标签(在您的情况下是数据集中城市的正确名称)请参阅:
Cleaning up factor levels (collapsing multiple levels/labels) 举个一般的例子。
但是,请注意,注意数据集中 Ackland 和 Auckland 字符串后面的额外 space:
# 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() 可以在您考虑 space 后起作用:
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 个,请注意这也处理了级别标签 space 中的
子集仅包含相关城市
subpower <- power[which(power$City == c("Auckland", "Wellington")), ]
您还可以进行子集化以排除负值、极值等...
注意:我在这里唯一真正的贡献是抓住了额外的 spaces,为了自己解决类似的问题,我发现 Aaron's answer 非常有帮助。希望这对您有所帮助!
我有这个 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), ]
在我 运行 这段代码之后,拼错的单词 ("Ackland") 并没有像我预期的那样变成奥克兰。
如图所示,突出显示的行应该更改为奥克兰:
为了解决你的问题,折叠因子水平 'Ackland' 和 'Auckland'(并且假设你想要 power$City 到 be/remain 一个因子):
一种方法是向 levels() 函数传递一个命名列表,每个名称都是所需级别的正确标签(在您的情况下是数据集中城市的正确名称)请参阅: Cleaning up factor levels (collapsing multiple levels/labels) 举个一般的例子。
但是,请注意,注意数据集中 Ackland 和 Auckland 字符串后面的额外 space:
# 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() 可以在您考虑 space 后起作用:
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 个,请注意这也处理了级别标签 space 中的
子集仅包含相关城市
subpower <- power[which(power$City == c("Auckland", "Wellington")), ]
您还可以进行子集化以排除负值、极值等...
注意:我在这里唯一真正的贡献是抓住了额外的 spaces,为了自己解决类似的问题,我发现 Aaron's answer 非常有帮助。希望这对您有所帮助!