【问题标题】:Error in `fct_reorder()`: ! `.f` must be a factor or character vector, not a data frame - trying to reorder a bar plot`fct_reorder()` 错误:! `.f` 必须是因子或字符向量,而不是数据框 - 尝试重新排序条形图
【发布时间】:2022-12-02 22:00:17
【问题描述】:

我有一个汇总表,其中包含 940 行数据集中的 4 个变量的平均值:

activity_means <- activity_daily_clean %>%
  summarize(sedentary = mean(sedentary_minutes),
            lightly_active = mean(lightly_active_minutes),
            fairly_active = mean(fairly_active_minutes),
            very_active = mean(very_active_minutes))

我想将它们绘制成一个简单的条形图,但活动强度水平(久坐 - 轻度活跃 - 相当活跃 - 非常活跃)显得杂乱无章:

act_means_df <- data.frame(
  activity_intensity=c("sedentary", "lightly active", "fairly active", "very active"),
  intens_means=c(991.2106, 192.8128, 13.56489, 21.16489)
)

ggplot(act_means_df)+
  geom_col(aes(x=activity_intensity, y=intens_means))

我尝试按照 guide in the R Graph Gallery 按照第二个变量的值重新排序条形图:

act_means_df <- data.frame(
  activity_intensity=c("sedentary", "lightly active", "fairly active", "very active"),
  intens_means=c(991.2106, 192.8128, 13.56489, 21.16489)
) %>%
  mutate(f_act_int = factor(activity_intensity))

act_means_df %>%
  fct_reorder(f_act_int, intens_means) %>%
  ggplot(aes(x=f_act_int, y=intens_means))+
  geom_bar(stat="identity", fill="#f68060", alpha=.6, width=.4) +
  coord_flip() +
  xlab("") +
  theme_bw()

但是当我运行最后一个块时出现以下错误: fct_reorder() 中的错误: ! .f 必须是因子或字符向量,而不是数据框

我确认 f_act_int 是否是一个因素:str(act_means_df): 'data.frame':4个观测值。 3个变量: $ activity_intensity: chr "sedentary" "轻微活跃" "相当活跃" "非常活跃" $ intens_means : num 991.2 192.8 13.6 21.2 $ f_act_int:因子 w/ 4 个级别“相当活跃”,..:3 2 1 4

但是,当我尝试使用 class(f_act_int) 自行检查对象时,错误消息显示“未找到对象‘f_act_int’”。

有人知道我错过了什么吗??

【问题讨论】:

  • 您必须添加 DF 的名称class(act_means__df$f_act_int)

标签: r bar-chart forcats


【解决方案1】:

您需要在dplyr::mutate() 中使用fct_reorder。

这不是解决此问题的唯一方法,但错误的要点是,当它需要一个因子或字符向量时,您正在传递整个数据框。相反,试试这个:

act_means_df %>%
  mutate(fa_act_in = fct_reorder(f_act_int, intens_means)) %>%
  ggplot(aes(x=f_act_int, y=intens_means))+
  geom_bar(stat="identity", fill="#f68060", alpha=.6, width=.4) +
  coord_flip() +
  xlab("") +
  theme_bw()

在你的全局环境中没有对象叫f_act_in;当您在 mutate() 中调用 fct_reorder() 时,R 在您的数据框中查找具有该名称的列,然后执行操作以返回更新的数据框。然后将更新后的数据框传递给ggplot()。

【讨论】:

    猜你喜欢
    • 2014-06-15
    • 1970-01-01
    • 2020-09-18
    • 2019-01-10
    • 2018-05-15
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多