按降序排列分组的本地数据框

时间:2015-11-11 01:45:53

标签: r sorting dplyr

我有一个本地数据框,我正在尝试按2个变量(“yr”和“mo”)进行分组,获取每个组中数据的平均值并对结果进行排序,以便最新数据显示在按降序排列。但是,我无法弄清楚如何让“yr”变量按降序排序。 “yr”变量错误地以升序显示。

library(dplyr)
df <- tbl_df(data.frame(yr = c(2009, 2009, 2009, 2010, 2010, 2010, 2011, 2011, 2011), 
                    qtr = c(1, 1, 1, 1, 1, 2, 2, 2, 2),
                    mo = c(1, 1, 2, 3, 3, 4, 5, 5, 5), 
                    date = as.Date(c("2009-01-01", "2009-01-02","2009-02-01",
                                     "2010-03-01","2010-03-02","2010-04-01",
                                     "2011-05-01","2011-05-02","2011-05-03")),
                    x = c(10, 20, 30, 40, 50, 60, 70, 80, 90),
                    y = c(2, 4, 6, 8, 10, 12, 14, 16, 18),
                    z = c(1, 3, 5, 7, 9, 11, 13, 15, 17)))
df %>%
    select(yr, mo, x:z) %>%
    group_by(yr, mo) %>%
    summarize_each(funs(mean)) %>%
    arrange(desc(yr), desc(mo))

Source: local data frame [5 x 5]
Groups: yr [3]

 yr    mo     x     y     z
(dbl) (dbl) (dbl) (dbl) (dbl)
1  2009     2    30     6     5
2  2009     1    15     3     2
3  2010     4    60    12    11
4  2010     3    45     9     8
5  2011     5    80    16    15

如果我删除“desc(yr)”并在arrange()函数中使用“yr”,我会得到相同的结果。

df %>%
      select(yr, mo, x:z) %>%
      group_by(yr, mo) %>%
      summarize_each(funs(mean)) %>%
      arrange(yr, desc(mo))

Source: local data frame [5 x 5]
Groups: yr [3]

 yr    mo     x     y     z
(dbl) (dbl) (dbl) (dbl) (dbl)
1  2009     2    30     6     5
2  2009     1    15     3     2
3  2010     4    60    12    11
4  2010     3    45     9     8
5  2011     5    80    16    15

如果删除“desc(mo)”并在排列函数中使用“mo”,我会得到预期的结果,数据按“mo”按升序排序。

df %>%
      select(yr, mo, x:z) %>%
      group_by(yr, mo) %>%
      summarize_each(funs(mean)) %>%
      arrange(yr, mo)

Source: local data frame [5 x 5]
Groups: yr [3]

 yr    mo     x     y     z
(dbl) (dbl) (dbl) (dbl) (dbl)
1  2009     1    15     3     2
2  2009     2    30     6     5
3  2010     3    45     9     8
4  2010     4    60    12    11
5  2011     5    80    16    15

为什么“yr”变量不会响应desc()函数,但“mo”变量会怎样?如何将结果按“yr”降序排序,然后按“y”降序排序?谢谢!

1 个答案:

答案 0 :(得分:1)

看起来分组正在干扰安排。

尝试添加ungroup()

df %>%
  select(yr, mo, x:z) %>%
  group_by(yr, mo) %>%
  summarise_each(funs(mean)) %>%
  ungroup() %>%
  arrange(desc(yr), desc(mo))

应该给你

    yr mo  x  y  z
1 2011  5 80 16 15
2 2010  4 60 12 11
3 2010  3 45  9  8
4 2009  2 30  6  5
5 2009  1 15  3  2

我认为你想要的是:yrmo都在下降。