首页 > 解决方案 > dplyr 的 ungroup() 函数何时删除 'vars' 属性?

问题描述

我直观地期望使用该ungroup()函数会删除“vars”属性。有时会,有时不会。规则是什么?我试图了解分组/取消分组的内部结构。

考虑下面的两个示例(在 R 3.4.4 上使用 dplyr 0.7.4)。在第一个中,保留了“vars”属性。在第二个它被丢弃。

#Example 1
models <- mtcars %>% group_by(cyl) %>% do(mod = lm(mpg ~ disp, data = .)) 
   %>% ungroup() 
attributes(models)

$row.names [1] 1 2 3

$vars [1] “圆柱”

$drop [1] 是的

$names [1] "cyl" "mod"

$class [1] "tbl_df" "tbl" "data.frame"

#Example 2
attributes(mtcars %>% group_by(cyl) %>% count() %>% ungroup())

$class [1] "tbl_df" "tbl" "data.frame"

$names [1] "cyl" "n"

$row.names [1] 1 2 3

标签: rdplyr

解决方案


不同之处在于return group_by %>% doa rowwise_dfwhilegroup_by %>% count返回 agrouped_df和 for rowwise_dfungroup仅删除rowwise_df类属性并保持其他与行相关的属性不变,另请参阅如何在 dplyr 中停止使用 rowwise

mtcars %>% group_by(cyl) %>% do(mod = lm(mpg ~ disp, data = .)) %>% class()
# [1] "rowwise_df" "tbl_df"     "tbl"        "data.frame"

mtcars %>% group_by(cyl) %>% count() %>% class()
# [1] "grouped_df" "tbl_df"     "tbl"        "data.frame"

推荐阅读