一次对多个因素的水平进行排序

Order the levels of multiple factors at once

我有一个充满字符变量的数据集,我想将其转换为有序因子变量。我能够一次将所有变量转换为因子,但我试图对它们进行排序 ("Stimme nicht zu", "Stimme eher nicht zu", "Stimme teilweise zu", "Stimme zu", "Stimme voll zu", "k. A.") 没有成功。你有解决方案吗?

这是我的代码和数据:

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"))

第二行代码应该是lambda函数

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.")))

或者可以指定levels

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

通过 dplyr 包,您可以将 mutateacross 一起使用。

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.")))

另一种可能性是使用 forcats 包中的 fct_relevel(它在 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."))