我有一個data.frame有幾個因素,如:R:按級別排序頻因子和策劃
df<-data.frame(Var1=as.factor(sample(c("AB", "BC", "CD", "DE", "EF"), 1000, replace=TRUE)))
與
summary(df$Var1)
AB BC CD DE EF
209 195 178 221 197
我要繪製的水平頻率data.frame如下:
ggplot(df, aes(x=factor(1), fill=factor(Var1)))+
geom_bar(width=1, colour="black")+
coord_polar(theta="y")+
theme_void()
但是,級別的順序是按字母順序排列的,而不是按頻率排列。從庫(plyr)使用計數我可以創建一個新data.frame,讓我每一級的頻率:
df_count <-count(df, "Var1")
Var1 freq
1 AB 209
2 BC 195
3 CD 178
4 DE 221
5 EF 197
,我可以再重新安排使用
df_count$Var1<-factor(df_count$Var1, levels=df_count$Var1[order(df_count$freq, decreasing=TRUE)])
,當繪製給我我想要的,每個級別的排序頻率。
1.)這是最優雅的解決方案嗎?它給了我原始data.frame中每個因子/列的額外data.frame,我覺得必須有一個更簡單的方法。
2.)當繪圖時,如何重命名圖例標籤並確保它們分配正確的因子水平?如果我使用
scale_fill_manual(labels=c("Name of AB", "Name of BC", "Name of CD", "Name of DE","Name of EF"))
標籤與正確的級別無關。這裏圖例中的第一個條目將是「DE」,因爲它是具有最高頻率的水平,但標籤將會說明scale_fill_manual中定義的「AB的名稱」。我可以每次手動檢查標籤的順序,但必須有自動方式嗎?
這很好,謝謝!結合aosmith的提示,如何正確使用命名向量,它就像一個魅力:-) – user45017