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

时间:2015-07-12 00:44:09

标签: r data.table dplyr

当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

1 个答案:

答案 0 :(得分:2)

这是open dplyr issue。在mutate之后,组被删除。如果你看一下课程,你会发现这种情况。

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类被删除),groups函数为这种类型的对象返回NULL

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