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

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

我有一个包含因子的数据框架。当我创建此数据框架的子集时,使用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"


缥缈止盈
浏览 601回答 4
4回答

慕的地6264312

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

慕姐8265434

这是一个已知的问题,一个可能的补救办法是drop.levels()在Gdata将您的示例打包为>&nbsp;drop.levels(subdf) &nbsp;&nbsp;letters&nbsp;numbers1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3>&nbsp;levels(drop.levels(subdf)$letters)[1]&nbsp;"a"&nbsp;"b"&nbsp;"c"还有dropUnusedLevels函数中的赫米斯克包裹。但是,它只能通过修改子集运算符来工作。[在这里不适用。作为推论,以每列为基础的直接方法是一个简单的方法。as.factor(as.character(data)):>&nbsp;levels(subdf$letters)[1]&nbsp;"a"&nbsp;"b"&nbsp;"c"&nbsp;"d"&nbsp;"e">&nbsp;subdf$letters&nbsp;<-&nbsp;as.factor(as.character(subdf$letters))>&nbsp;levels(subdf$letters)[1]&nbsp;"a"&nbsp;"b"&nbsp;"c"
打开App,查看更多内容
随时随地看视频慕课网APP