提问人:Lenman55 提问时间:6/1/2023 最后编辑:Lenman55 更新时间:6/1/2023 访问量:217
如何一次更改多个因素的水平
How to change the levels of multiple factors at once
问:
G'day, 我有一个包含多个因子变量的数据框。
我想将所有这些因素变量的水平更改为相同的水平。 它们都有 16 个级别,我想更改为 7 个级别。
如果我像这样,它已经对我有用了:
data <-
data |>
mutate(variable = fct_recode(
variable,
"new level" = "old level",
"…" = "…"
"new level" = "old level"))
我可以为每一个因素做这件事。
但是由于我还有大约 19 个其他因素,我宁愿用更少的样板而不是一对一来做。
因此,我基本上是在寻找一种方法来同时改变所有 19 个因素的水平
我尝试了一些东西,但没有完全成功。across()
level_mapping <- c(
"new level" = "old level",
"..." = "..."
"new level" = "old level")
df_new <- df_old %>%
mutate(across(where(is.factor), ~ fct_recode(., !!!level_mapping)))
我希望我的问题可以理解,任何帮助将不胜感激
[编辑]我忘了提:在改变因子水平的同时,我还想去掉其中一个 一个 repex:
library(dplyr)
df <- data.frame(
var1 = factor(c("A", "B", "C")),
var2 = factor(c("A", "B", "C")),
var3 = factor(c("A", "B", "C"))
)
level_mapping <- c(
"A" = "R",
"B" = "E",
"C" = "F")
df_new <- df %>%
mutate(across(where(is.factor), ~ recode(., !!!level_mapping))), "F" = NA)))
答:
3赞
MrFlick
6/1/2023
#1
此代码为我运行
df %>%
mutate(across(where(is.factor), ~ recode(., !!!level_mapping, "F" = NA_character_)))
Recode 起初抱怨该值,但我将其更改为使用强类型的 NA 值。大多数情况下,让事情正常工作只是涉及将括号移动到正确的位置。NA
评论
0赞
Lenman55
6/1/2023
也对我有用!还注意到我能够修复的数据帧中的一些问题。谢谢
评论
across
mutate(across(where(is.factor), ~ fct_recode(., !!!level_mapping)))
mutate(across(where(is.factor), ~ recode(., !!!level_mapping)))