0

我想使用我事先创建的项目用 fct_recode 重命名因子级别。我首先创建一些标签并将它们保存到一个列表中:

#Creating the Labels:
LabelsWithN <- c(
  sprintf("Man(%s)", FreqGender["Man","Freq"]),
  sprintf("Woman(%s)", FreqGender["Woman","Freq"]),
  sprintf("Non-Binary(%s)", FreqGender["Non-Binary","Freq"]),
  sprintf("Other(%s)", FreqGender["Other","Freq"]),
  sprintf("Prefer Not To Disclose(%s)", FreqGender["Prefer not to disclose","Freq"])
)

这将创建一个包含“Man(105)”、“Woman(51)”等项目的 chr 列表。现在我想重新标记原始数据集中的因素(即“Man”->“Man(105)”)为了给图加标签。我想使用列表项(即 LabelsWithN[1])或直接使用创建字符串的函数(即 sprintf("Man(%s)", FreqGender["Man","Freq"])。

然后我尝试将列表项或函数输入到 fct_recode 中:

#Using the Labels:
DataSet %>%
  mutate(`Gender. What_is_your_ge.._` = fct_recode(`Gender. What_is_your_ge.._`, LabelsWithN[1] = "Man", sprintf("Woman(%s)", FreqGender["Woman","Freq"]) = "Woman")) %>%
#THis is just the code for the graph:
  ggplot(aes(x = `Gender. What_is_your_ge.._` , y = `Age. How_old_are_you?`, main = "Age Distribution By Gender")) +
    geom_boxplot() +
    xlab("Gender (n)") +
    ylab("Age")

但是,这会产生:

"Unexpected '=' in:
"DataSet %>%
  mutate(`Gender. What_is_your_ge.._` = fct_recode(`Gender. What_is_your_ge.._`, LabelsWithN[1] ="

我使用函数还是列表项都没有关系。

向量是一个因子,列表中充满了字符。如果我操纵代码将因子“man”重命名为“cat”(“cat”=“Man”),则代码可以正常工作。

如何处理列表项/将函数输入 fct_recode 以使其工作?另外,有人可以向我解释这里的问题是什么吗?如果我打印出 LabelsWithN[1] 我会打印出正确的字符串。

谢谢你和BW,

4

1 回答 1

1

也许这可能会有所帮助?

x <- factor(c("apple", "bear", "banana", "dear")) # what you want to recode
levels <- c(fruit = "apple", fruit = "banana") # how you want to recode it
x <- fct_recode(x, !!!levels) # recoding it
于 2021-05-20T13:30:44.163 回答