Li.
Li.

Reputation: 39

Creating a factor from a numeric variable

I am quite new to R and I am having some troubles with creating factors. I should create a factor from a numeric variable. This factor should have three levels: dissatisfied (values 0 to 4) "neither/nor" (value5) "satisfied" (values 6 to 10).

lsat_factor<-factor(soep$lsat)
levels(lsat_factor)
levels(lsat_factor)[0:4] <- ("Dissatisfied")
levels(lsat_factor)[5]<-("Neither/nor")
levels(lsat_factor)[6:10]<-("Satisfied")

I tried this but it is definitely not working. Thanks in advance,

Upvotes: 0

Views: 544

Answers (2)

MrFlick
MrFlick

Reputation: 206197

To collapse groups, you can use the list syntax for levels<-. For example

# test data
soep <- data.frame(lsat = letters[1:10])

lsat_factor <- factor(soep$lsat)

table(lsat_factor)
# lsat_factor
# a b c d e f g h i j 
# 1 1 1 1 1 1 1 1 1 1 

levels(lsat_factor) <- list(
    "Dissatisfied"=levels(lsat_factor)[1:4],
    "Neither/nor" = levels(lsat_factor)[5],
    "Satisfied" = levels(lsat_factor)[6:10]
)

table(lsat_factor)
# lsat_factor
# Dissatisfied  Neither/nor    Satisfied 
#            4            1            5 

Upvotes: 0

joran
joran

Reputation: 173537

I would probably just use cut:

> x <- 0:10
> cut(x = x,breaks = c(0,4,5,10),include.lowest = TRUE,
      labels = c('Dissatisfied','Either/Or','Satisfied'))
 [1] Dissatisfied Dissatisfied Dissatisfied Dissatisfied Dissatisfied Either/Or    Satisfied    Satisfied   
 [9] Satisfied    Satisfied    Satisfied   
Levels: Dissatisfied Either/Or Satisfied

Upvotes: 5

Related Questions