我有一个包含factor. 当我使用subset或其他索引函数创建此数据框的子集时,会创建一个新数据框。但是,该factor变量保留其所有原始级别,即使/如果它们不存在于新数据框中。
factor
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 # 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)