[英]Does dplyr `rowwise()` group in the same way `group_by()` groups?
library(tidyverse)
mtcars %>% group_by(cyl) %>% is_grouped_df()
#> [1] TRUE
我可以按变量对数据框进行分组,并确认它是否使用is_grouped_df()
function 进行分组(如上所示)。
我可以对 dplyr rowwise()
function 运行相同的分析,并且似乎rowwise()
不会按行对数据集进行分组。 我有一个问题,阅读帮助页面 ( ?rowwise
) 并没有明确回答我的问题。
按行分组输入
说明: rowwise() 允许您在数据帧上一次计算一行。 当矢量化 function 不存在时,这是最有用的。
逐行 tibble 保持其逐行状态,直到被 group_by()、ungroup() 或 as_tibble() 显式删除。
我的问题:在调用rowwise()
function 之后,我是否需要稍后在我的 pipe 中调用 ungroup( ungroup()
function 来取消分组我的数据集? 或者这是默认完成的? 以下 pipe 表明包含rowwise()
的 pipe 未分组:
mtcars %>% rowwise() %>% is_grouped_df()
#> [1] FALSE
这句话让我感到困惑,“逐行小标题保持其逐行状态,直到被... ungroup()... 明确删除”。 为什么我需要ungroup()
一个已经取消分组的小标题?
有趣的观察。 这可能是is_grouped_df
的错误,除非它是某种我不知道的功能。 但我确实认为考虑到下面进行的测试, ungroup
很重要(见评论):
library(tidyverse)
mtcars %>% select(1:3) %>% rowwise() %>% head(2)
#> Source: local data frame [2 x 3]
#> Groups: <by row>
##### ^ THIS DOES HAVE A GROUP ####
#>
#> # A tibble: 2 x 3
#> mpg cyl disp
#> <dbl> <dbl> <dbl>
#> 1 21 6 160
#> 2 21 6 160
mtcars %>% select(1:3) %>% rowwise() %>% mutate(n()) %>% head(2)
#> Source: local data frame [2 x 4]
#> Groups: <by row>
#>
#> # A tibble: 2 x 4
#> mpg cyl disp `n()`
#> <dbl> <dbl> <dbl> <int>
#> 1 21 6 160 1
#> 2 21 6 160 1
mtcars %>% select(1:3) %>% mutate(n()) %>% head(2)
#> mpg cyl disp n()
#> 1 21 6 160 32
#> 2 21 6 160 32
##### ^ THIS IS EXPECTED AND THE n BEHAVES DIFFERENTLY WHEN THE ROWWISE() IS APPLIED ####
##### IF WE WANT TO RESTORE "NORMAL" BEHAVIOR, IT'S PROBABLY WISE TO UNGROUP IN ORDER TO LOSE THE ROWWISE OPERATIONS #####
mtcars %>% select(1:3) %>% rowwise() %>% ungroup %>% mutate(n()) %>% head(2)
#> # A tibble: 2 x 4
#> mpg cyl disp `n()`
#> <dbl> <dbl> <dbl> <int>
#> 1 21 6 160 32
#> 2 21 6 160 32
## ^ NORMAL AFTER UNGROUP
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.