为了账号安全,请及时绑定邮箱和手机立即绑定

在子设置的数据帧中降低因子级别

在子设置的数据帧中降低因子级别

缥缈止盈 2019-06-01 10:32:58
在子设置的数据帧中降低因子级别我有一个包含因子的数据框架。当我创建此数据框架的子集时,使用subset()或者另一个索引函数,创建一个新的数据框架。然而,因子变量保留了所有的原始级别-即使它们不存在于新的数据框架中。这会在进行分面绘图或使用依赖于因素级别的函数时造成头痛。在我的新数据框架中,从一个因素中删除级别的最简洁的方法是什么?下面是我的例子:df <- data.frame(letters=letters[1:5],                    numbers=seq(1:5))levels(df$letters)## [1] "a" "b" "c" "d" "e"subdf <- subset(df, numbers <= 3)##   letters numbers## 1       a       1## 2       b       2## 3       c       3    ## but the levels are still there!levels(subdf$letters)## [1] "a" "b" "c" "d" "e"
查看完整描述

4 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

从R版本2.12开始,就有一个droplevels()功能。

levels(droplevels(subdf$letters))


查看完整回答
反对 回复 2019-06-01
?
慕姐8265434

TA贡献1813条经验 获得超2个赞

这是一个已知的问题,一个可能的补救办法是drop.levels()Gdata将您的示例打包为

> drop.levels(subdf)
  letters numbers1       a       12       b       23       c       3> levels(drop.levels(subdf)$letters)[1] "a" "b" "c"

还有dropUnusedLevels函数中的赫米斯克包裹。但是,它只能通过修改子集运算符来工作。[在这里不适用。

作为推论,以每列为基础的直接方法是一个简单的方法。as.factor(as.character(data)):

> levels(subdf$letters)[1] "a" "b" "c" "d" "e"> subdf$letters <- as.factor(as.character(subdf$letters))> levels(subdf$letters)[1] "a" "b" "c"


查看完整回答
反对 回复 2019-06-01
  • 4 回答
  • 0 关注
  • 650 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信