# subset で抽出したデータフレームの成分の存在していない level を消去する関数 rm.level <- function(x){ sub.fun <- function(sub.df){ if (is.factor(sub.df)) factor(sub.df) else sub.df } data.frame(lapply(x, sub.fun)) } subset2 <- function(x, ...){ # subset との組み合わせでさらに便利に x <- subset(x, ...) rm.level(x) } # 使用方法 x <- data.frame(a=c("a","b","c"), b=1:3) y <- subset(x, a!="c") # 不要な要素が残ってしまう summary(y) y <- data.frame(lapply(x, factor)) # 数値も要素になってしまう summary(y) z <- subset(x, a!="c") z <- rm.level(z) # 要素は要素のまま、数値は数値のまま summary(z) summary(subset2(x, a!="c"))