How to select all factor variables in R
r
Solution
Some data:
insurance <- data.frame(
int = 1:5,
fact1 = letters[1:5],
fact2 = factor(1:5),
fact3 = LETTERS[3:7]
)
I would use `sapply` like you did, but combined with `is.factor` to return a logical vector:
is.fact <- sapply(insurance, is.factor)
# int fact1 fact2 fact3
# FALSE TRUE TRUE TRUE
Then use `[` to extract these columns:
factors.df <- insurance[, is.fact]
# fact1 fact2 fact3
# 1 a 1 C
# 2 b 2 D
# 3 c 3 E
# 4 d 4 F
# 5 e 5 G
Finally, to get the levels, use `lapply`:
lapply(factors.df, levels)
# $fact1
# [1] "a" "b" "c" "d" "e"
#
# $fact2
# [1] "1" "2" "3" "4" "5"
#
# $fact3
# [1] "C" "D" "E" "F" "G"
You might also find `str(insurance)` interesting as a short summary.
Problem
I have a data frame named "insurance" with both numerical and factor variables. How can I select all factor variables so that I can check the levels of the categorical variables? I tried `sapply(insurance,class)` to get the the classes of all variables. But then I can't make logical argument based on if `class(var)="factor"` as the variable names are also included in the result of `sapply()`. Thanks,