发布
社区首页 >问答首页 >按组变量排列不工作的grouped_df

按组变量排列不工作的grouped_df
EN

Stack Overflow用户
提问于 2014-10-24 19:54:47
回答 2查看 31.4K关注 0票数 32

我有一个data.frame,其中包含客户名称、年份和每年的几个收入数字。

代码语言:javascript
代码运行次数:0
复制
df <- data.frame(client = rep(c("Client A","Client B", "Client C"),3), 
                 year = rep(c(2014,2013,2012), each=3), 
                 rev = rep(c(10,20,30),3)
                )

我想最终得到一个按客户和年度汇总收入的data.frame。然后,我想按年对data.frame进行排序,然后按收入下降进行排序。

代码语言:javascript
代码运行次数:0
复制
library(dplyr)
df1 <- df %>% 
        group_by(client, year) %>%
        summarise(tot = sum(rev)) %>%
        arrange(year, desc(tot))

但是,当使用上面的代码时,arrange()函数根本不会改变分组data.frame的顺序。当我运行下面的代码并强制使用一个普通的data.frame时,它可以工作。

代码语言:javascript
代码运行次数:0
复制
   library(dplyr)
    df1 <- df %>% 
            group_by(client, year) %>%
            summarise(tot = sum(rev)) %>%
            data.frame() %>%
            arrange(year, desc(tot))

我是遗漏了什么,还是每次尝试通过分组变量arrange grouped_df时都需要这样做?

版本: 3.1.1 dplyr包版本: 0.3.0.2

编辑11/13/2017:如丙二酮所指出的,从dplyr0.5开始,在排序时再一次安排忽略组。因此,我的原始代码现在按照我最初预期的方式工作。

OR排表()再次忽略分组,返回到dplyr 0.3及更高版本的行为。这使得安排()与其他dplyr动词不一致,但我认为这种行为通常更有用。无论如何,它不会再次改变,因为更多的变化只会造成更多的混乱。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-24 20:04:16

尝试切换group_by语句的顺序:

代码语言:javascript
代码运行次数:0
复制
df %>% 
  group_by(year, client) %>%
  summarise(tot = sum(rev)) %>%
  arrange(year, desc(tot))

我认为arrange是在组内排序;在summarize之后,最后一个组被删除,所以这意味着在您的第一个示例中,它是在client组中排列行。将订单切换到group_by(year, client)似乎可以修复它,因为client组在summarize之后会被删除。

另外,还有ungroup()函数

代码语言:javascript
代码运行次数:0
复制
df %>% 
  group_by(client, year) %>%
  summarise(tot = sum(rev)) %>%
  ungroup() %>%
  arrange(year, desc(tot))

编辑,@lucacerone:,因为dplyr 0.5,这不再起作用了:

破坏更改OR排表()再次忽略分组,返回到dplyr 0.3和更高版本的行为。这使得安排()与其他dplyr动词不一致,但我认为这种行为通常更有用。无论如何,它不会再次改变,因为更多的变化只会造成更多的混乱。

票数 68
EN

Stack Overflow用户

发布于 2018-09-28 16:28:17

dplyr的最新版本(至少来自dplyr_0.7.4)允许在组内使用arrange。您刚才已经设置好了arrange()调用.by_group = TRUE。在您的示例中有更多可用的这里信息,请尝试:

代码语言:javascript
代码运行次数:0
复制
library(dplyr)
df %>% 
        group_by(client, year) %>%
        summarise(tot = sum(rev)) %>%
        arrange(desc(tot), .by_group = TRUE)
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26555297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档