[英]Error in `fct_reorder()`: ! `.f` must be a factor or character vector, not a data frame - trying to reorder a bar plot
我有一個匯總表,其中包含 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))
我想把它們 plot 變成一個簡單的欄 plot,但是活動強度的級別(久坐 - 輕度活躍 - 相當活躍 - 非常活躍)顯得雜亂無章:
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))
我嘗試按照R 圖表庫中的指南按照第二個變量的值重新排序柱 plot:
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 obs。 3 個變量: $ activity_intensity: chr "sedentary" "lightly active" "fairly active" "very active" $ intens_means: num 991.2 192.8 13.6 21.2 $ f_act_int: factor w/ 4 levels "fairly active",..: 3 2 1 4個
但是,當我嘗試使用class(f_act_int)
單獨檢查 object 時,錯誤消息顯示“未找到對象‘f_act_int’”。
有人知道我錯過了什么嗎?
您需要在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()
您的全局環境中沒有 object 稱為f_act_in
; 當您在mutate()
中調用fct_reorder()
) 時,R 在您的數據框中查找具有該名稱的列,然后執行操作以返回更新后的數據框。 然后將更新后的數據框傳遞給ggplot()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.