2017-03-17 51 views
0

我刚刚在数据集中读取数据,并在删除行后使用“?”或NA的,你会调用它,它apears仍然表明,当你键入 “?”因素级别在删除元素后仍显示

水平(样本$职业)
[1] “ADM-文书” “武装 - 强制” “工艺修复”
[5] “EXEC-管理”, “ 农牧钓鱼”, “处理程序的清洁剂”, “机-OP-inspct”
[9]“ 其他服务”, “私法内部业务模型”, “教授,专业” “ 保护-SERV”
[13] “销售”, “技术支持”, “ 交通运输移动”

而且当你使用str函数。但是,当我使用nrow命令或子集(Sample,占用==“?”)时,它似乎已被删除。你有这个解释吗? 可以在http://archive.ics.uci.edu/ml/datasets/Adult 找到完整的数据集我有另一个版本,但我认为是这样的。 :)

#Uploading data set 
     mappesti <- paste0(file_content,"\\2. cand.merc.(mat)\\6. Data Science\\Reidar\\") 

     data <- read.table(paste0(mappesti,"adult.txt"),header=F,sep=",") 

#Naming data set 
     colnames(data) <- c("age", 
     "workclass", 
     "fnlwgt", 
     "education", 
     "education.num", 
     "marital.status", 
     "occupation", 
     "relationship", 
     "race", 
     "sex", 
     "capital.gain", 
     "capital.loss", 
     "hours.per.week", 
     "native.country", 
     "class") 


     length(data$occupation[data$occupation==" ?"]) 
     length(data$native.country[data$native.country==" ?"]) 
     length(data$workclass[data$workclass==" ?"]) 

#Deleting rows with " ?" 
     Sample <- data 
     str(Sample) 
     subset(Sample, occupation==" ?") 
     Sample <- subset(Sample, occupation!=" ?") 
     Sample <- subset(Sample, native.country!=" ?") 
     Sample <- subset(Sample, workclass!=" ?") 
     subset(Sample, occupation==" ?") 

     nrow(Sample) 
     levels(Sample$occupation) 
+2

看看'droplevels'函数。 – A5C1D2H2I1M1N2O1R2T1

回答

0

是的,因素可以有水平,即使没有与该值的点。

F1 = factor(c("red", "blue", "red"), levels=c("red", "blue", "green")) 
table(F1) 
F1 
    red blue green 
    2  1  0 

这是理想的行为。仅仅因为我现在没有任何绿色的问题,并不意味着我以后不会有任何问题。如果没有绿色的等级,我不能只添加一个绿色的点。但是,如@ A5C1D2H2I1M1N2O1R2T1所述,您可以删除droplevel未使用的所有级别。

F2 = droplevels(F1) 
table(F2) 
F2 
red blue 
    2 1 
+0

谢谢你的回答,它非常有意义! :) –