Вот еще один способ, который, я считаю, эквивалентен подходу factor(..):
factor(..)
> df <- data.frame(let=letters[1:5], num=1:5) > subdf <- df[df$num <= 3, ] > subdf$let <- subdf$let[ , drop=TRUE] > levels(subdf$let) [1] "a" "b" "c"