我有一个汇总表,其中包含来自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“”。
有人知道我错过了什么吗?
1条答案
按热度按时间dl5txlt91#
您需要在
dplyr::mutate()
中使用fct_reorder
。这并不是解决这个问题的唯一方法,但错误的要点是,当它需要一个因子或字符向量时,你传递了整个 Dataframe 。
全局环境中没有名为
f_act_in
的对象;当您在mutate()
中调用fct_reorder()
时,R会在数据框中查找具有该名称的列,然后执行该操作以返回更新的数据框。然后,将此更新的数据框传递给ggplot()
。