子集化后未使用的因子水平没有下降?

时间:2014-05-19 23:03:03

标签: r subset r-factor

我有一个变量df1$StudyAreaVisitNote,我将其转化为一个因素。但是当我将df1子集化为BS时,这个变量并不是一个因素:对子集化数据使用table()函数会显示似乎应该返回的结果{{1}在原始数据上运行?

为什么会这样?

我找到的两个解决方法是:

  1. 导出子集化数据并重新导入
  2. 在子集化后
  3. ,再次将列指定为因子
  4. 代码:

    table()

1 个答案:

答案 0 :(得分:2)

即使在子集化之后,因子仍然是一个因素。我确定class(BS$StudyAreaVisitNote)=="factor"。但是,因素不会自动降低未使用的水平。当你做像

这样的事情时,这会很有帮助
set.seed(16)
dd<-data.frame(
    gender=sample(c("M","F"), 25, replace=T),
    age=rpois(25, 20)
)
dd

table(subset(dd, age<15)$gender)
# F M 
# 0 3 

这个因素记住它有M和F,即使子集没有任何F,仍然保留了这个级别。如果你想摆脱未使用的等级,你可以明确地调用droplevels()

table(droplevels(subset(dd, age<15))$gender)
# M
# 3

(现在它忘记了F&#39;)

因此,不要使用summary,而是在两个data.frames上比较table的结果。