在'fct_reorder()`中发生错误:!“.f”'必须是因子或字符向量,而不是数据框-尝试重新排序条形图

t1rydlwq  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(186)

我有一个汇总表,其中包含来自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必须是因子或字符向量,而不是 Dataframe
我确认f_act_int是否是一个因子:str(act_means_df):“ Dataframe ”:3个变量的4个观测值:$活动强度:chr“久坐不动”“轻度活动”“相当活跃”“非常活跃”$ intens_表示:数字991.2 192.8 13.6 21.2 $ f_动作_整数:因子w/ 4水平“相当活跃”,..:三二一四
但当我尝试使用class(f_act_int)检查对象本身时,错误消息显示“未找到对象”f_act_int“”。
有人知道我错过了什么吗?

dl5txlt9

dl5txlt91#

您需要在dplyr::mutate()中使用fct_reorder
这并不是解决这个问题的唯一方法,但错误的要点是,当它需要一个因子或字符向量时,你传递了整个 Dataframe 。

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()

相关问题