我有一个包含的数据框factor
。当我使用subset
或其他索引功能创建此数据框的子集时,将创建一个新的数据框。但是,factor
即使/如果新数据帧中不存在变量,该变量将保留其所有原始级别。
这在进行多面图绘制或使用依赖于因子水平的函数时会引起问题。
从新数据框中的一个因素中删除级别的最简洁方法是什么?
这是一个例子:
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
# all levels are still there!
levels(subdf$letters)
## [1] "a" "b" "c" "d" "e"
您要做的就是在子集设置之后再次将factor()应用于变量:
> subdf$letters
[1] a b c
Levels: a b c d e
subdf$letters <- factor(subdf$letters)
> subdf$letters
[1] a b c
Levels: a b c
编辑
从因子页面示例中:
factor(ff) # drops the levels that do not occur
要从数据框中的所有因子列中删除级别,可以使用:
subdf <- subset(df, numbers <= 3)
subdf[] <- lapply(subdf, function(x) if(is.factor(x)) factor(x) else x)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句