2016-01-25 128 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