gpt4 book ai didi

r - 将多列转换为因子并使用 mutate(across) 重新调整

转载 作者:行者123 更新时间:2023-12-05 03:19:27 24 4
gpt4 key购买 nike

dat <- data.frame(Comp1Letter = c("A", "B", "D", "F", "U", "A*", "B", "C"),
Comp2Letter = c("B", "C", "E", "U", "A", "C", "A*", "E"),
Comp3Letter = c("D", "A", "C", "D", "F", "D", "C", "A"))

GradeLevels <- c("A*", "A", "B", "C", "D", "E", "F", "G", "U")

我有一个类似于上面的数据框(但我不想更改许多其他列)。

我有兴趣更改的列包含字母等级列表,但目前是字符向量且顺序不正确。

我需要将这些列中的每一列转换为具有正确顺序的因子。我已经能够使用下面的代码让它工作:

factordat <-
dat %>%
mutate(Comp1Letter = factor(Comp1Letter, levels = GradeLevels)) %>%
mutate(Comp2Letter = factor(Comp2Letter, levels = GradeLevels)) %>%
mutate(Comp3Letter = factor(Comp3Letter, levels = GradeLevels))

然而,这非常冗长并且占用了大量空间。

看看其他一些问题,我尝试结合使用 mutate() 和 across(),如下所示:

factordat <-
dat %>%
mutate(across(c(Comp1Letter, Comp2Letter, Comp3Letter) , factor(levels = GradeLetters)))

但是,当我这样做时,向量仍然是字符向量。

有人可以告诉我我做错了什么或提供其他选择吗?

最佳答案

您可以像这样将 across 作为匿名函数执行:

dat <- data.frame(Comp1Letter = c("A", "B", "D", "F", "U", "A*", "B", "C"),
Comp2Letter = c("B", "C", "E", "U", "A", "C", "A*", "E"),
Comp3Letter = c("D", "A", "C", "D", "F", "D", "C", "A"))

GradeLevels <- c("A*", "A", "B", "C", "D", "E", "F", "G", "U")

dat %>%
tibble::as_tibble() %>%
dplyr::mutate(dplyr::across(c(Comp1Letter, Comp2Letter, Comp3Letter) , ~forcats::parse_factor(., levels = GradeLevels)))

# # A tibble: 8 × 3
# Comp1Letter Comp2Letter Comp3Letter
# <fct> <fct> <fct>
# 1 A B D
# 2 B C A
# 3 D E C
# 4 F U D
# 5 U A F
# 6 A* C D
# 7 B A* C
# 8 C E A

您已经很接近了,剩下要做的就是使因子函数匿名。这可以通过 ~.tidyversefunction(x)x 在基础 R 中。

关于r - 将多列转换为因子并使用 mutate(across) 重新调整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73452694/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com