Search code examples
rdplyrforcats

R Combine Likert Points


I have a 10-point Likert scale that looks like this:

    > head(dsidata$Mood_2)
[1] Great Great Bad   Good  Great So-so
Levels: Couldn't be worse Very bad Bad Meh So-so Okay Good Very Good Great Really great

I want to 'merge' categories such that the number of factors reduces to 5. Respondents who selected options "Couldn't be worse" or "Very bad" would be assigned the new category of "Very negative", etc until the 10 factors reduce to 5.

Any help with this is greatly appreciated


Solution

  • I'm sure your variable is categorized as a factor. So just merge some factors using this approach.

    set.seed(42)  # for reproducibility
    
    # mimicking your data
    df1 <- data.frame(var=rdunif(100, 10))
    df1$var <- factor(df1$var, 1:10, labels=c("Couldn't be worse", "Very bad", 
                                            "Bad", "Meh", "So-so", "Okay",
                                            "Good", "Very Good", "Great", 
                                            "Really great"))
    
    df1$var1 <- df1$var
    
    # merging levels
    levels(df1$var1) <- list("Very negative"=c("Couldn't be worse", "Very bad"),
                            "negative" = c("Bad", "Meh"),
                            "neutral" = c("So-so", "Okay"),
                            "positive"=c("Good", "Very Good"),
                            "very positive"=c("Great", "Really great"))
    

    yielding

    > tail(df1, 10)
                      var          var1
    91           Very bad Very negative
    92          Very Good      positive
    93           Very bad Very negative
    94           Very bad Very negative
    95  Couldn't be worse Very negative
    96  Couldn't be worse Very negative
    97               Okay       neutral
    98           Very bad Very negative
    99          Very Good      positive
    100         Very Good      positive