Home > Software engineering >  Order the levels of multiple factors at once
Order the levels of multiple factors at once

Time:04-25

I have a dataset full of character variables, which I want to convert to ordered factor variables. I was able to convert all variables to factors at once, but my attempt to order them ("Stimme nicht zu", "Stimme eher nicht zu", "Stimme teilweise zu", "Stimme zu", "Stimme voll zu", "k. A.") was not successful. Do you have a solution for me?

Here are my code and my data:

MD4[,1:10] <- lapply(MD4[1:10], factor)
MD4[,1:10] <- lapply(MD4[1:10], ordered(MD4[1:10],c("Stimme nicht zu", "Stimme eher nicht zu", "Stimme teilweise zu", "Stimme zu", "Stimme voll zu", "k. A.")))


structure(list(veränderung_imap_austausch.verstärkt.akteuren = c("Stimme teilweise zu", 
"Stimme zu", NA, NA, "Stimme teilweise zu", "Stimme zu", "Stimme zu", 
"Stimme teilweise zu", NA, NA, NA, NA, NA, NA, NA, "Stimme teilweise zu", 
NA, NA, NA, NA, NA, "Stimme zu", NA, NA, NA, NA, "Stimme teilweise zu", 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, "Stimme voll zu", NA, "Stimme zu", 
NA, NA, NA, NA, NA, "Stimme voll zu", "Stimme zu", NA, NA, NA, 
"Stimme zu", "Stimme teilweise zu", NA, NA, NA, NA, NA, NA, NA, 
NA, "Stimme voll zu", "Stimme teilweise zu", "Stimme zu", NA, 
NA, NA, "Stimme zu", "Stimme zu", NA, "Stimme nicht zu", "Stimme zu", 
NA, "Stimme teilweise zu", "Stimme zu", "Stimme teilweise zu", 
NA, NA, NA, "Stimme voll zu", "Stimme voll zu", "Stimme teilweise zu", 
NA, NA, NA, "Stimme voll zu", NA, "Stimme nicht zu", "Stimme zu", 
NA, "Stimme zu", NA, "Stimme zu", "Stimme zu", "Stimme zu", "Stimme teilweise zu", 
"Stimme teilweise zu", "Stimme teilweise zu", NA, "Stimme teilweise zu", 
"k. A.", "Stimme eher nicht zu"), veränderung_imap_austausch.verstärkt.ideen = c("Stimme voll zu", 
"Stimme zu", NA, NA, "Stimme teilweise zu", "Stimme zu", "Stimme zu", 
"Stimme eher nicht zu", NA, NA, NA, NA, NA, NA, NA, "Stimme zu", 
NA, NA, NA, NA, NA, "Stimme zu", NA, NA, NA, NA, "Stimme zu", 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, "Stimme voll zu", NA, "Stimme zu", 
NA, NA, NA, NA, NA, "Stimme zu", "Stimme zu", NA, NA, NA, "Stimme zu", 
"Stimme teilweise zu", NA, NA, NA, NA, NA, NA, NA, NA, "Stimme voll zu", 
"Stimme zu", "Stimme voll zu", NA, NA, NA, "Stimme zu", "Stimme zu", 
NA, "Stimme teilweise zu", "Stimme zu", NA, "Stimme eher nicht zu", 
"Stimme zu", "Stimme zu", NA, NA, NA, "Stimme voll zu", "Stimme voll zu", 
"Stimme teilweise zu", NA, NA, NA, "Stimme voll zu", NA, "Stimme zu", 
"Stimme zu", NA, "Stimme zu", NA, "Stimme teilweise zu", "Stimme voll zu", 
"Stimme zu", "Stimme teilweise zu", "Stimme zu", "Stimme zu", 
NA, "Stimme zu", "k. A.", "Stimme teilweise zu"), veränderung_imap_fortschritt.umsetzung = c("Stimme zu", 
"Stimme zu", NA, NA, "Stimme teilweise zu", "Stimme zu", "k. A.", 
"Stimme teilweise zu", NA, NA, NA, NA, NA, NA, NA, "Stimme zu", 
NA, NA, NA, NA, NA, "Stimme zu", NA, NA, NA, NA, "Stimme zu", 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, "Stimme zu", NA, "Stimme zu", NA, 
NA, NA, NA, NA, "Stimme voll zu", "Stimme teilweise zu", NA, 
NA, NA, "Stimme zu", "Stimme teilweise zu", NA, NA, NA, NA, NA, 
NA, NA, NA, "Stimme zu", "Stimme teilweise zu", "Stimme zu", 
NA, NA, NA, "Stimme zu", "Stimme zu", NA, "Stimme teilweise zu", 
"Stimme zu", NA, "Stimme teilweise zu", "Stimme teilweise zu", 
"Stimme zu", NA, NA, NA, "Stimme voll zu", "Stimme voll zu", 
"Stimme teilweise zu", NA, NA, NA, "Stimme voll zu", NA, "Stimme teilweise zu", 
"Stimme teilweise zu", NA, "Stimme zu", NA, "Stimme teilweise zu", 
"Stimme voll zu", "Stimme teilweise zu", "Stimme zu", "Stimme eher nicht zu", 
"Stimme teilweise zu", NA, "Stimme teilweise zu", "k. A.", "Stimme teilweise zu"
), veränderung_imap_neue.strukturen = c("Stimme zu", "Stimme zu", 
NA, NA, "Stimme teilweise zu", "Stimme zu", "Stimme zu", "Stimme teilweise zu", 
NA, NA, NA, NA, NA, NA, NA, "Stimme teilweise zu", NA, NA, NA, 
NA, NA, "Stimme teilweise zu", NA, NA, NA, NA, "Stimme teilweise zu", 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, "Stimme teilweise zu", NA, "Stimme zu", 
NA, NA, NA, NA, NA, "Stimme voll zu", "Stimme teilweise zu", 
NA, NA, NA, "Stimme zu", "Stimme teilweise zu", NA, NA, NA, NA, 
NA, NA, NA, NA, "Stimme zu", "Stimme zu", "Stimme teilweise zu", 
NA, NA, NA, "Stimme zu", "Stimme zu", NA, "Stimme teilweise zu", 
"Stimme zu", NA, "Stimme teilweise zu", "Stimme zu", "Stimme zu", 
NA, NA, NA, "Stimme voll zu", "Stimme zu", "Stimme teilweise zu", 
NA, NA, NA, "Stimme voll zu", NA, "Stimme voll zu", "Stimme teilweise zu", 
NA, "Stimme voll zu", NA, "Stimme teilweise zu", "Stimme voll zu", 
"Stimme teilweise zu", "Stimme eher nicht zu", "Stimme eher nicht zu", 
"Stimme eher nicht zu", NA, "Stimme eher nicht zu", "k. A.", 
"Stimme nicht zu"), veränderung_imap_zuständigkeiten.klarer = c("Stimme teilweise zu", 
"Stimme teilweise zu", NA, NA, "Stimme teilweise zu", "Stimme zu", 
"k. A.", "Stimme teilweise zu", NA, NA, NA, NA, NA, NA, NA, "Stimme eher nicht zu", 
NA, NA, NA, NA, NA, "Stimme teilweise zu", NA, NA, NA, NA, "Stimme teilweise zu", 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, "Stimme teilweise zu", NA, "Stimme zu", 
NA, NA, NA, NA, NA, "Stimme teilweise zu", "Stimme teilweise zu", 
NA, NA, NA, "Stimme teilweise zu", "Stimme teilweise zu", NA, 
NA, NA, NA, NA, NA, NA, NA, "Stimme teilweise zu", "Stimme teilweise zu", 
"Stimme zu", NA, NA, NA, "Stimme teilweise zu", "Stimme teilweise zu", 
NA, "Stimme zu", "Stimme teilweise zu", NA, "Stimme teilweise zu", 
"Stimme teilweise zu", "Stimme zu", NA, NA, NA, "Stimme voll zu", 
"Stimme zu", "Stimme teilweise zu", NA, NA, NA, "Stimme voll zu", 
NA, "Stimme eher nicht zu", "Stimme zu", NA, "Stimme teilweise zu", 
NA, "Stimme teilweise zu", "Stimme teilweise zu", "Stimme teilweise zu", 
"Stimme teilweise zu", "Stimme eher nicht zu", "Stimme eher nicht zu", 
NA, "Stimme zu", "k. A.", "Stimme eher nicht zu"), veränderung_imap_rollen.klarer = c("Stimme teilweise zu", 
"Stimme teilweise zu", NA, NA, "Stimme teilweise zu", "Stimme zu", 
"k. A.", "Stimme eher nicht zu", NA, NA, NA, NA, NA, NA, NA, 
"Stimme teilweise zu", NA, NA, NA, NA, NA, "Stimme teilweise zu", 
NA, NA, NA, NA, "Stimme eher nicht zu", NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, "Stimme zu", NA, "Stimme zu", NA, NA, NA, NA, NA, "Stimme teilweise zu", 
"Stimme nicht zu", NA, NA, NA, "Stimme teilweise zu", "Stimme teilweise zu", 
NA, NA, NA, NA, NA, NA, NA, NA, "Stimme teilweise zu", "Stimme teilweise zu", 
"Stimme nicht zu", NA, NA, NA, "Stimme zu", "Stimme teilweise zu", 
NA, "Stimme zu", "Stimme nicht zu", NA, "Stimme teilweise zu", 
"Stimme zu", "Stimme zu", NA, NA, NA, "Stimme voll zu", "Stimme zu", 
"Stimme teilweise zu", NA, NA, NA, "Stimme voll zu", NA, "Stimme eher nicht zu", 
"Stimme teilweise zu", NA, "Stimme teilweise zu", NA, "Stimme teilweise zu", 
"Stimme zu", "Stimme teilweise zu", "Stimme eher nicht zu", "Stimme teilweise zu", 
"Stimme teilweise zu", NA, "Stimme zu", "k. A.", "Stimme zu"), 
    veränderung_imap_digitale.lösungen = c("Stimme zu", "Stimme zu", 
    NA, NA, "Stimme voll zu", "Stimme zu", "Stimme zu", "Stimme zu", 
    NA, NA, NA, NA, NA, NA, NA, "Stimme teilweise zu", NA, NA, 
    NA, NA, NA, "Stimme zu", NA, NA, NA, NA, "k. A.", NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, "Stimme voll zu", NA, "Stimme zu", 
    NA, NA, NA, NA, NA, "Stimme voll zu", "Stimme zu", NA, NA, 
    NA, "Stimme zu", "Stimme teilweise zu", NA, NA, NA, NA, NA, 
    NA, NA, NA, "Stimme nicht zu", "Stimme teilweise zu", "Stimme zu", 
    NA, NA, NA, "Stimme voll zu", "Stimme voll zu", NA, "k. A.", 
    "Stimme voll zu", NA, "Stimme zu", "Stimme zu", "Stimme zu", 
    NA, NA, NA, "Stimme zu", "Stimme voll zu", "k. A.", NA, NA, 
    NA, "Stimme zu", NA, "Stimme nicht zu", "Stimme voll zu", 
    NA, "Stimme zu", NA, "Stimme zu", "Stimme voll zu", "Stimme voll zu", 
    "Stimme zu", "Stimme zu", "Stimme zu", NA, "Stimme zu", "k. A.", 
    "Stimme zu"), veränderung_imap_klarheit.prozesse = c("Stimme voll zu", 
    "Stimme teilweise zu", NA, NA, "Stimme zu", NA, NA, "Stimme zu", 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "Stimme zu", 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, "Stimme zu", NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "Stimme zu", 
    NA, NA, NA, NA, NA, NA, "Stimme teilweise zu", NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, "Stimme voll zu", NA, NA, "Stimme voll zu", "Stimme voll zu", 
    "Stimme teilweise zu", "Stimme zu", "Stimme zu", NA, "Stimme teilweise zu", 
    "k. A.", "Stimme zu"), veränderung_imap_weiterent.planung = c("Stimme voll zu", 
    "Stimme teilweise zu", NA, NA, "Stimme teilweise zu", NA, 
    NA, "Stimme teilweise zu", NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, "Stimme zu", NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    "Stimme voll zu", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, "Stimme zu", NA, NA, NA, NA, NA, 
    NA, "Stimme teilweise zu", NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "Stimme zu", 
    NA, NA, "Stimme zu", "Stimme voll zu", "Stimme teilweise zu", 
    "Stimme zu", "Stimme zu", NA, "Stimme teilweise zu", "k. A.", 
    "Stimme zu"), veränderung_imap_arbeit.relfelktieren = c("Stimme zu", 
    "Stimme teilweise zu", NA, NA, "Stimme zu", NA, NA, "Stimme zu", 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "Stimme zu", 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, "Stimme voll zu", NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "Stimme voll zu", 
    NA, NA, NA, NA, NA, NA, "Stimme teilweise zu", NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, "Stimme zu", NA, NA, "Stimme teilweise zu", "Stimme voll zu", 
    "Stimme teilweise zu", "Stimme zu", "Stimme zu", NA, "Stimme zu", 
    "k. A.", "Stimme zu")), row.names = c(NA, -114L), class = c("tbl_df", 
"tbl", "data.frame"))

CodePudding user response:

The second line of code should be a lambda function

MD4[1:10] <- lapply(MD4[1:10], function(x) 
   ordered(x,c("Stimme nicht zu", "Stimme eher nicht zu",
   "Stimme teilweise zu", "Stimme zu", "Stimme voll zu", "k. A.")))

Or can specify the levels as

lapply(MD4[1:10], ordered,
   c("Stimme nicht zu", "Stimme eher nicht zu",
  "Stimme teilweise zu", "Stimme zu", "Stimme voll zu", "k. A."))

CodePudding user response:

Another possibility is using fct_relevel from forcats package (it is in tidyverse)

library(dpylr)
library(forcats)
df %>% 
  mutate(across(starts_with("veränderung"), forcats::fct_relevel, "Stimme nicht zu", "Stimme eher nicht zu", "Stimme teilweise zu", "Stimme zu", "Stimme voll zu", "k. A."))

CodePudding user response:

With the dplyr package, you can use mutate with across.

library(dplyr)

MD4 %>% 
  mutate(across(1:10, ordered, levels = c("Stimme nicht zu", "Stimme eher nicht zu", "Stimme teilweise zu", "Stimme zu", "Stimme voll zu", "k. A.")))
  • Related