删除元素后仍会显示因子级别

时间:2017-03-17 11:49:07

标签: r

我只是在数据集中读取并在删除带有“?”的行后或者你可以称之为NA,当你输入时它仍会显示:

  
    

水平(样品$职业)
    [1]“?” “Adm-clerical”“武装部队”“工艺修复”
    [5]“执行管理”“     农业捕鱼“”处理者 - 清洁工“”机器操作“
    [9]“     其他服务“”Priv-house-serv“”专业教授“”     保护业务模型“
    [13]“销售”“技术支持”“     输送移动的“

  

当你使用str函数时。但是当我使用nrow命令或子集(Sample,Occupation ==“?”)时,它似乎已被删除。你对此有解释吗? 完整的数据集可以在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)

1 个答案:

答案 0 :(得分:2)

是的,即使没有具有该值的点,因子也可以具有水平。

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