【发布时间】:2021-08-26 18:12:31
【问题描述】:
我想使用一个变量重新调整 R 中的一个因子,该变量指向具有要重新调整的变量向量的变量。
library(tidyverse)
response = fct_relevel(response, <variable containing name of vector variable>)
我这样做是因为我有一个查找表,我可以在其中提取包含我想用来重新调整因子的向量的变量的名称。例如,这是question_group 的查找表,每个question_group 都有自己的向量来重新调整。
# a lookup table where I can get the level for each question group
levels_lkup <- tibble(question_group = c("A", "B", "C"),
factor_level = c("level_1", "level_2", "level_3"))
例如,这里是三个因子向量。
# define factor levels
level_1 <- c("Excellent", "Fair", "Poor")
level_2 <- c("Positive", "Neutral", "Negative")
level_3 <- c("Happy", "Indifferent", "Sad")
在这个reprex 中,我想使用level_1 优秀/一般/差。 我正在为问题组 A 存储 factor_level。
# pull the level for question group A. (The problem is that this pulls "level_1" in quotes)
this_level <- levels_lkup %>%
filter(question_group == "A") %>%
pull(factor_level)
问题是当我在fct_relevel 中使用this_level 时,它不会评估,因为它是评估this_level 作为字符"level_1" 而不是对上面定义的向量level_1 的引用。
# my data of id numbers, q_a1, and q_a2
df_foo <- tibble(id = c(1:6),
q_a1 = c(rep("Excellent", 3), rep("Poor",3)),
q_a2 = c(rep("Fair", 3), rep("Poor",2), NA)) %>%
# notice that there are unknown levels, because each variable does not have at least one of each factor level
# meaning, once I pivot_longer, the new variable will need to be relevelled.
mutate(q_a1 = fct_relevel(q_a1, level_1),
q_a2 = fct_relevel(q_a2, level_1)) %>%
pivot_longer(-id, names_to = "key", values_to = "response") %>%
# I can't use "this_level" as a pointer to level_1. This does not relevel the factor.
mutate(response = fct_relevel(response, this_level))
我可以使用这个指针重新调整因子吗?
【问题讨论】: