library(tidyverse)
mtcars %>% group_by(cyl) %>% is_grouped_df()
#> [1] TRUE我可以根据变量对数据帧进行分组,并确认是否使用is_grouped_df()函数对其进行分组(如上文所示)。
我可以对dplyr rowwise()函数运行相同的分析,而且rowwise()似乎不按行对数据集进行分组。我有一个问题,阅读帮助页(?rowwise)不能清楚地回答我的问题。
组按行输入
描述:行()允许您在数据帧上按时间计算行。当向量化函数不存在时,这是最有用的。
行级tibble在被group_by()、ungroup()或as_tibble()显式删除之前保持其逐行状态。
我的问题是:在调用rowwise()函数之后,是否需要调用管道中的ungroup()函数来取消对数据集的分组?还是默认情况下这样做?下面的管道建议不对包含rowwise()的管道进行分组:
mtcars %>% rowwise() %>% is_grouped_df()
#> [1] FALSE这句话让我感到困惑,“逐行tibble保持其逐行状态,直到由.ungroup().显式删除”。为什么我需要ungroup()一个已经没有分组的tibble呢?
发布于 2020-05-04 16:55:47
有趣的观察。这可能是is_grouped_df的一个bug,除非它某种程度上是我不知道的特性。但是,考虑到下面所做的测试,我确实认为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 UNGROUPhttps://stackoverflow.com/questions/61597222
复制相似问题