使用dplyr添加另一个分组

Sam*_*man 7 r dplyr

我想改变一个数据框两次,分成两组相互交叉的列.即:

df <- df %>% group_by(a, b) %>% mutate(x = sum(d))
df <- df %>% group_by(a, b, c) %>% mutate(y = sum(e))
Run Code Online (Sandbox Code Playgroud)

是否有更快/更优雅的方式来做到这一点?我希望能够做到这样的事情:

df <- df %>%
    group_by(a, b) %>%
    mutate(x = sum(d)) %>%
    group_by(c) %>%
    mutate(y = sum(e))
Run Code Online (Sandbox Code Playgroud)

或者也许保存第一个group_by应用的变量,然后使用它两次.

akr*_*run 13

我们add=TRUE在第二个中使用group_by3个变量分组,c在OP的例子中添加-

 df %>%
   group_by(a, b) %>%
   mutate(x = sum(d)) %>%
   group_by(c, add=TRUE) %>%
   mutate(y = sum(e))
Run Code Online (Sandbox Code Playgroud)

根据文件 ?group_by

默认情况下,当add = FALSE时,group_by将覆盖现有组.要改为添加到现有组,请使用add = TRUE

这可以在一次group_by调用中完成,但仅限于非dplyrish函数:

 df %>%
   group_by(a, b) %>%
   mutate(x = sum(d), y = ave(e, c, sum))
Run Code Online (Sandbox Code Playgroud)

  • 将`group_by(...,add = TRUE)`与`data.table`一起使用时会出现不一致的问题:https://github.com/hadley/dplyr/issues/1459 (2认同)