gpt4 book ai didi

r - 如何解释 dplyr 消息 `summarise()` 通过 'x' 重新分组输出(用 `.groups` 参数覆盖)?

转载 作者:行者123 更新时间:2023-12-01 23:14:12 25 4
gpt4 key购买 nike

在更新到 dplyr 开发版本 0.8.99.9003 后运行 group_by 和 summarise() 时,我开始收到一条新消息(见帖子标题)。

以下是重新创建输出的示例:

library(tidyverse)
library(hablar)
df <- read_csv("year, week, rat_house_females, rat_house_males, mouse_wild_females, mouse_wild_males
2018,10,1,1,1,1
2018,10,1,1,1,1
2018,11,2,2,2,2
2018,11,2,2,2,2
2019,10,3,3,3,3
2019,10,3,3,3,3
2019,11,4,4,4,4
2019,11,4,4,4,4") %>%
convert(chr(year,week)) %>%
mutate(total_rodents = rowSums(select_if(., is.numeric))) %>%
convert(num(year,week)) %>%
group_by(year,week) %>% summarise(average = mean(total_rodents))

输出小标题是正确的,但出现此消息:

summarise() regrouping output by 'year' (override with .groups argument)



这应该如何解释?当我按年和周分组时,为什么它只报告按“年”重新分组?另外,覆盖是什么意思,我为什么要这样做?

我不认为该消息表明存在问题,因为它出现在整个 dplyr 小插图中:
https://cran.r-project.org/web/packages/dplyr/vignettes/programming.html

我相信这是一条新消息,因为它只出现在最近的 SO 问题中,例如 How to melt pairwise.wilcox.test output using dplyr?R Aggregate over multiple columns (两者都没有解决重组/覆盖消息)。

谢谢!

最佳答案

这只是一个友好的警告信息。默认情况下,如果 summarise 之前有任何分组,它会删除一组变量,即 group_by 中指定的最后一个变量.如果只有一个分组变量,summarise后面就没有分组属性了。如果有多个,即这里是两个,则分组属性减少为 1,即数据将具有“年份”作为分组属性。作为一个可复制的例子

library(dplyr)
mtcars %>%
group_by(am) %>%
summarise(mpg = sum(mpg))
#`summarise()` ungrouping output (override with `.groups` argument)
# A tibble: 2 x 2
# am mpg
#* <dbl> <dbl>
#1 0 326.
#2 1 317.
消息是 ungroup ing 即当有一个 group_by ,它会在 summarise 之后删除该分组
mtcars %>% 
group_by(am, vs) %>%
summarise(mpg = sum(mpg))
#`summarise()` regrouping output by 'am' (override with `.groups` argument)
# A tibble: 4 x 3
# Groups: am [2]
# am vs mpg
# <dbl> <dbl> <dbl>
#1 0 0 181.
#2 0 1 145.
#3 1 0 118.
#4 1 1 199.
在这里,它删除最后一个分组并使用“am”重新分组
如果我们检查 ?summarise ,还有 .groups参数默认为 "drop_last"其他选项是 "drop" , "keep" , "rowwise"

.groups - Grouping structure of the result.

"drop_last": dropping the last level of grouping. This was the only supported option before version 1.0.0.

"drop": All levels of grouping are dropped.

"keep": Same grouping structure as .data.

"rowwise": Each row is it's own group.

When .groups is not specified, you either get "drop_last" when all the results are size 1, or "keep" if the size varies. In addition, a message informs you of that choice, unless the option "dplyr.summarise.inform" is set to FALSE.


即如果我们更改 .groupssummarise ,我们没有收到消息,因为组属性被删除了
mtcars %>% 
group_by(am) %>%
summarise(mpg = sum(mpg), .groups = 'drop')
# A tibble: 2 x 2
# am mpg
#* <dbl> <dbl>
#1 0 326.
#2 1 317.


mtcars %>%
group_by(am, vs) %>%
summarise(mpg = sum(mpg), .groups = 'drop')
# A tibble: 4 x 3
# am vs mpg
#* <dbl> <dbl> <dbl>
#1 0 0 181.
#2 0 1 145.
#3 1 0 118.
#4 1 1 199.


mtcars %>%
group_by(am, vs) %>%
summarise(mpg = sum(mpg), .groups = 'drop') %>%
str
#tibble [4 × 3] (S3: tbl_df/tbl/data.frame)
# $ am : num [1:4] 0 0 1 1
# $ vs : num [1:4] 0 1 0 1
# $ mpg: num [1:4] 181 145 118 199
以前,未发出此警告,并且可能导致 OP 执行 mutate 的情况。或者其他假设没有分组并导致意外输出的东西。现在,警告向用户表明我们应该注意存在分组属性
注意: .groups现在是 experimental在它的生命周期中。因此,该行为可以在 future 的版本中进行修改
根据我们是否需要基于相同分组变量(或不需要)对数据进行任何转换,我们可以在 .groups 中选择不同的选项。 .

关于r - 如何解释 dplyr 消息 `summarise()` 通过 'x' 重新分组输出(用 `.groups` 参数覆盖)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62140483/

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