我有一个本地数据框,我正在尝试按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”降序排序?谢谢!
答案 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
我认为你想要的是:yr
和mo
都在下降。