2016-01-25 96 views
1

我想知道如何修改下面的代碼,根據它們在年份的每個級別的頻率重新排序單元格。重新排序水平

Year  <- c(rep(c("2006-07", "2007-08", "2008-09", "2009-10"), each = 4)) 
Category <- c(rep(c("A", "B", "C", "D"), times = 4)) 
Frequency <- c(168, 259, 226, 340, 216, 431, 319, 368, 423, 645, 234, 685, 166, 467, 274, 251) 
Data  <- data.frame(Year, Category, Frequency) 

library(dplyr) 
Data <- group_by(Data,Year) %>% 
mutate(pos = cumsum(Frequency) - (0.5 * Frequency)) 

library(ggplot2) 
p <- ggplot(Data, aes(x = Year, y = Frequency)) + 
    geom_bar(aes(fill = Category), stat="identity", show.legend = FALSE) + 
    geom_text(aes(label = Frequency, y = pos), size = 3, nudge_y = -25) + 
    geom_text(aes(label = Category, y = pos), size = 3, nudge_y = 25) 

回答

5

嘗試添加功能arrange分組後:

#library(dplyr) 
Data <- Data %>% group_by(Year) %>% 
     arrange(Frequency) %>%   #<---- Add this call 
     mutate(pos = cumsum(Frequency) - (0.5 * Frequency)) 

#library(ggplot2) 
ggplot(Data, aes(x = Year, y = Frequency)) + 
     geom_bar(aes(fill = Category), stat="identity", show.legend=FALSE) + 
     geom_text(aes(label = Frequency, y = pos), size = 3, nudge_y = -25) + 
     geom_text(aes(label = Category, y = pos), size = 3, nudge_y = 25) 

enter image description here

+0

@皮埃爾Lafortune,非常感謝您的建議,我如何使用安排的數據<代替時 - GROUP_BY(數據,年)%>% mutate(pos = cumsum(Frequency) - (0.5 * Frequency)),我使用Data <-ddply(Data,。(Var1),transform,pos = cumsum(Freq) - 0.5 * Freq )? – shoorideh

+0

不要使用ddply –

+0

這意味着我不能用ddply安排函數嗎? – shoorideh