2012-03-06 65 views
1

如何根據另一個因子的級別的一致順序對一個data.frame列中的因子級別進行排序?R - 將另一個因子(用於ggplot中的標記目的)重新排序

例如,在代碼:

require(RJSONIO) 
require(ggplot2) 

race.data.json=fromJSON('http://ergast.com/api/f1/2011/constructors/mclaren/results.json?limit=50') 

pd=function(rd,df=NULL) { 
    for (el in rd$MRData$RaceTable$Races) 
    for (el2 in el$Results){ 
     tmp=data.frame(row.names=NULL,round=as.numeric(el$round),race=el$raceName,num=el2$number,pos=el2$position,driver=el2$Driver['familyName']) 
     df=rbind(df,tmp) 
    } 
    df 
} 
df=pd(race.data.json) 

df$pos=factor(df$pos,levels=c('1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','DNF')) 

ggplot(df)+geom_point(aes(x=round,y=pos,col=driver))+scale_colour_discrete(name="Driver") 

如何可以生成一組使用根據DF $圓順序(數字順序)訂購的DF $種族因子x軸標籤的?也就是說,如果我將+scale_x_discrete(labels=df$race)添加到ggplot命令中,如何確保x軸標籤遵循原始x軸df $ round值的順序?

+1

''''''或'reorder()' – Chase 2012-03-06 19:48:20

回答

1

如果數據幀已經被排序,並且比賽是一個字符,你可以騙一點,做到這一點:

ggplot(df)+geom_point(aes(x=factor(round),y=pos,col=driver)) + 
    scale_colour_discrete(name="Driver") + 
    opts(axis.text.x = theme_text(angle = 90)) + 
    scale_x_discrete(labels = unique(df$race)) 

否則,relevelreorder是要走的路,大通說。

相關問題