我有一个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))
我是遗漏了什么,还是每次尝试通过分组变量arrange
grouped_df时都需要这样做?
版本: 3.1.1 dplyr包版本: 0.3.0.2
编辑11/13/2017:如丙二酮所指出的,从dplyr0.5开始,在排序时再一次安排忽略组。因此,我的原始代码现在按照我最初预期的方式工作。
OR排表()再次忽略分组,返回到dplyr 0.3及更高版本的行为。这使得安排()与其他dplyr动词不一致,但我认为这种行为通常更有用。无论如何,它不会再次改变,因为更多的变化只会造成更多的混乱。
发布于 2014-10-24 20:04:16
尝试切换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,这不再起作用了:
破坏更改OR排表()再次忽略分组,返回到dplyr 0.3和更高版本的行为。这使得安排()与其他dplyr动词不一致,但我认为这种行为通常更有用。无论如何,它不会再次改变,因为更多的变化只会造成更多的混乱。
发布于 2018-09-28 16:28:17
dplyr
的最新版本(至少来自dplyr_0.7.4
)允许在组内使用arrange
。您刚才已经设置好了arrange()
调用.by_group = TRUE
。在您的示例中有更多可用的这里信息,请尝试:
library(dplyr)
df %>%
group_by(client, year) %>%
summarise(tot = sum(rev)) %>%
arrange(desc(tot), .by_group = TRUE)
https://stackoverflow.com/questions/26555297
复制相似问题