問題

我有一個包含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"
 

  最佳答案

您應該做的只是在子設定後再次將pactor()應用於變數:

 > 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)
 

  相同標籤的其他問題

rdataframer-factorr-faq