У меня есть куча факторных переменных, которые имеют одинаковые уровни, и я хочу, чтобы они все переупорядочивались аналогично, используя fct_relevel
из пакета forcats
. Многие имена переменных начинаются с одинаковых символов («Q11A» - «Q11X», «Q12A» - «Q12X», «Q13A» - «Q13X» и т. Д.). Я хотел использовать функцию starts_with
от dplyr
, чтобы сократить задачу. Следующая ошибка не привела мне ошибку, но она ничего не сделала. Есть ли что-то, что я делаю неправильно?Использование fct_relevel над списком переменных с помощью map_at
library(dplyr)
library(purrr)
library(forcats)
library(tibble)
#Setting up dataframe
f1 <- factor(c("a", "b", "c", "d"))
f2 <- factor(c("a", "b", "c", "d"))
f3 <- factor(c("a", "b", "c", "d"))
f4 <- factor(c("a", "b", "c", "d"))
f5 <- factor(c("a", "b", "c", "d"))
df <- tibble(f1, f2, f3, f4, f5)
levels(df$f1)
[1] "a" "b" "c" "d"
#Attempting to move level "c" up before "a" and "b".
df <- map_at(df, starts_with("f"), fct_relevel, "c")
levels(df$f1)
[1] "a" "b" "c" "d" #Didn't work
#If I just re-level for one variable:
fct_relevel(df$f1, "c")
[1] a b c d
Levels: c a b d
#That worked.
Очевидно, я запутался, когда я должен использовать 'purrr :: map' и когда я должен используйте 'dplyr :: mutate'. – Phil
Это легко простить. Обычно вы хотите использовать разные вариации 'mutate' для столбцов и' map' внутри 'mutate' для столбцов списка и невостребованных вычислений. – Axeman
@akrun, извините, я только нахожу приличных дураков, которые заканчиваются использованием 'mutate_each', который планируется устареть. Не стесняйтесь забивать, если у вас есть хорошая цель 'mutate_at'. – Axeman