[英]sort by first group element dplyr
可能是一個簡單的答案,但證明令人驚訝的挑戰。 我的數據如下所示,狀態百分比發生在三年內:
State<-c('Assam','Bihar','Chandigarh','Delhi','Goa')
2012<-c(96, 95, 94, 92, 99)
2013<-c(97, 97, 94, 93, 100)
2014<-c(97, 98, 96, 95, 100)
df<-data.frame(State, 2013, 2013, 2014)
我試圖按國家分組,安排年份,然后通過提高2012年的百分比來安排國家組。 還需要一個單獨的df,按照2014年的百分比排列各州。
這就是我所擁有的:
library(reshape2)
library(dplyr)
dfmelt<-melt(df, id = 'State')
colnames(dfmelt)<-c('State','Year','Percent')
dfmelt<-dfmelt %>% arrange(Percent) %>% group_by(State) %>% arrange(Year)
嘗試了最后一行的一百萬種組合並且無法破解它。 看過類似的問題,但這里沒有總結或突變,只是純粹的重新排列,我被卡住了。
最終我創造了2個點圖,其中一個在Y軸上按2012年的百分比排名,一個按2014年的百分比排名。 圖一我需要ggplot的確切順序的數據幀,對吧? 如果我弄錯了,請告訴我。
謝謝!
如果您的目標是在ggplot
訂購軸,則可以使用df
原樣進行操作。
你只需要在ggplot
使用'reorder'
df<-data.frame("State" = c('Assam','Bihar','Chandigarh','Delhi','Goa'),
"2012" = c(96, 95, 94, 92, 99),
"2013" = c(97, 97, 94, 93, 100),
"2014" = c(97, 98, 96, 95, 100))
library(ggplot2)
ggplot(data=df, aes(x=reorder(State, X2012), y=X2014)) +
geom_bar(stat="identity")
您的數據創建代碼未運行,並且您重復了2013年。
以下是生成該數據的代碼:
State <- c('Assam','Bihar','Chandigarh','Delhi','Goa')
p2012 <- c(96, 95, 94, 92, 99)
p2013 <- c(97, 97, 94, 93, 100)
p2014 <- c(97, 98, 96, 95, 100)
df <- data.frame(State, p2012, p2013, p2014)
然后,您可以執行以下操作以接收按州百分比排序的狀態組排序的數據框(長格式):
library(dplyr)
library(tidyr)
df %>%
gather(Year, Percentage, -State) %>%
group_by(State) %>%
mutate(Percentage2012 = Percentage[Year == 'p2012']) %>%
ungroup() %>%
arrange(Percentage2012, State, Year) %>%
select(-Percentage2012)
得出的數據框如下:
Source: local data frame [15 x 3]
State Year Percentage
(fctr) (fctr) (dbl)
1 Delhi p2012 92
2 Delhi p2013 93
3 Delhi p2014 95
4 Chandigarh p2012 94
5 Chandigarh p2013 94
6 Chandigarh p2014 96
7 Bihar p2012 95
8 Bihar p2013 97
9 Bihar p2014 98
10 Assam p2012 96
11 Assam p2013 97
12 Assam p2014 97
13 Goa p2012 99
14 Goa p2013 100
15 Goa p2014 100
希望這可以幫助。 當然,您只需稍微修改上述代碼即可創建2014年數據框。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.