6.9 重计算因子水平

6.9.1 问题

你想要重新计算一个因子的水平。这在因子水平实际并没有出现在数据中时非常有用。它可能发生在数据的导入或者当你移除一些行时。

6.9.2 方案

对于单个因子变量:

  1. # 创建额外的因子水平 (gamma)
  2. x <- factor(c("alpha", "beta", "alpha"), levels = c("alpha",
  3. "beta", "gamma"))
  4. x
  5. #> [1] alpha beta alpha
  6. #> Levels: alpha beta gamma
  7. # 移除额外的因子水平
  8. x <- factor(x)
  9. x
  10. #> [1] alpha beta alpha
  11. #> Levels: alpha beta

当导入数据之后,你可能有一个混合因子变量和其他向量的数据框,然后想要重新计算所有因子的水平。你可以使用 droplevels() 函数实现这一点。

  1. # 创建一些因子的数据框 (有额外的因子水平)
  2. df <- data.frame(x = factor(c("alpha", "beta", "alpha"),
  3. levels = c("alpha", "beta", "gamma")), y = c(5, 8, 2),
  4. z = factor(c("red", "green", "green"), levels = c("red",
  5. "green", "blue")))
  6. # 显示因子水平 (with extra levels)
  7. df$x
  8. #> [1] alpha beta alpha
  9. #> Levels: alpha beta gamma
  10. df$z
  11. #> [1] red green green
  12. #> Levels: red green blue
  13. # 丢掉额外因子水平
  14. df <- droplevels(df)
  15. # 再次显示因子,现在没有额外的因子水平了
  16. df$x
  17. #> [1] alpha beta alpha
  18. #> Levels: alpha beta
  19. df$z
  20. #> [1] red green green
  21. #> Levels: red green

6.9.3 另见

想要重计算一个数据框中所有的因子变量列的因子水平,参见重计算数据框所有因子列的水平