group_by 对于 data.table 与 data.frame 的不同行为

different behavior for group_by for data.table vs. data.frame

当 dplyr::mutate 用于分组 data.table 时,分组随后会丢失。 data.frame 不会出现此行为。这是一个错误吗?我正在使用 dplyr_0.4.1 和 data.table_1.9.4.

require(data.table)
require(dplyr)

by_cyl_df <- group_by( mtcars, cyl ) %>%
    dplyr::mutate( . , 
        maxmpg = max( mpg )
    )
groups( by_cyl_df )

[[1]] cyl

by_cyl_dt   <- group_by( as.data.table(mtcars), cyl ) %>%
    dplyr::mutate( . , 
        maxmpg = max( mpg )
    )
groups( by_cyl_dt )

NULL

这是一个open dplyr issue。在 mutate 之后,组被删除。如果您查看 classes,您会发现这种情况正在发生。

by_cyl_dt_gg   <- group_by( as.data.table(mtcars), cyl )

class(by_cyl_dt_gg)
# [1] "grouped_dt" "tbl_dt"     "tbl"        "data.table" "data.frame"
class(by_cyl_dt_gg %>% mutate(max=max(mpg)))
# [1] "tbl_dt"     "tbl"        "data.table" "data.frame"

并且因为它不再分组(groups_dt class 被删除),groups 函数 returns NULL 对于这种类型的对象

> dplyr:::groups.tbl_dt
function (x) 
{
    NULL
}
<environment: namespace:dplyr>