【发布时间】:2022-08-23 11:05:27
【问题描述】:
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() 和 cross() 的组合,如下所示:
factordat <-
dat %>%
mutate(across(c(Comp1Letter, Comp2Letter, Comp3Letter) , factor(levels = GradeLetters)))
但是,当我这样做时,向量仍然是字符向量。
有人可以告诉我我做错了什么或提供另一种选择吗?
标签: r