gpt4 book ai didi

r - 按组变量排列grouped_df不起作用

转载 作者:行者123 更新时间:2023-12-03 08:52:38 24 4
gpt4 key购买 nike

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

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进行排序,然后使收入递减。
library(dplyr)
df1 <- df %>%
group_by(client, year) %>%
summarise(tot = sum(rev)) %>%
arrange(year, desc(tot))

但是,当使用 arrange()函数上方的代码时,根本不会更改分组的data.frame的顺序。当我运行以下代码并将其强制为正常的data.frame时,它可以工作。
   library(dplyr)
df1 <- df %>%
group_by(client, year) %>%
summarise(tot = sum(rev)) %>%
data.frame() %>%
arrange(year, desc(tot))

我是否缺少某些内容,或者每次尝试通过分组变量对grouped_df进行 arrange编码时都需要这样做吗?

R版本:3.1.1
dplyr软件包版本:0.3.0.2

编辑11/13/2017:
lucacerone所述,从dplyr 0.5开始,排序时再次排列会忽略组。因此,我的原始代码现在可以按照我最初预期的方式工作。

arrange() once again ignores grouping, reverting back to the behaviour of dplyr 0.3 and earlier. This makes arrange() inconsistent with other dplyr verbs, but I think this behaviour is generally more useful. Regardless, it’s not going to change again, as more changes will just cause more confusion.

最佳答案

尝试切换group_by语句的顺序:

df %>% 
group_by(year, client) %>%
summarise(tot = sum(rev)) %>%
arrange(year, desc(tot))

我认为 arrange在组内排序;在 summarize之后,最后一个组被删除,因此这意味着在第一个示例中,它是在 client组内排列行。将顺序切换为 group_by(year, client)似乎可以解决问题,因为 client组在 summarize之后被删除了。

另外,还有 ungroup()函数
df %>% 
group_by(client, year) %>%
summarise(tot = sum(rev)) %>%
ungroup() %>%
arrange(year, desc(tot))

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

Breaking changes arrange() once again ignores grouping, reverting back to the behaviour of dplyr 0.3 and earlier. This makes arrange() inconsistent with other dplyr verbs, but I think this behaviour is generally more useful. Regardless, it’s not going to change again, as more changes will just cause more confusion.

关于r - 按组变量排列grouped_df不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26555297/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com