按第一组元素dplyr

时间:2016-02-26 06:32:12

标签: r 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的确切顺序的数据帧,对吧?如果我弄错了,请告诉我。

谢谢!

2 个答案:

答案 0 :(得分:2)

如果您的目标是在ggplot中订购轴,则可以按原样使用df

您只需要在ggplot

中使用“重新排序”
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")

答案 1 :(得分:2)

您的数据创建代码未运行,并且您重复了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年数据框。