サブセット化されたデータフレーム内の未使用の因子レベルを削除する 質問する

サブセット化されたデータフレーム内の未使用の因子レベルを削除する 質問する

を含むデータ フレームがあります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"

ベストアンサー1

R バージョン 2.12 以降ではdroplevels()関数があります。

levels(droplevels(subdf$letters))

おすすめ記事