我可以在单个dplyr语句中切换分组变量吗?

我可以在单个dplyr语句中切换分组变量吗?,r,data.table,dplyr,R,Data.table,Dplyr,下面是一个简单的例子来说明这个问题: library(data.table) dt = data.table(a = c(1,1,2,2), b = 1:2) dt[, c := cumsum(a), by = b][, d := cumsum(a), by = c] # a b c d #1: 1 1 1 1 #2: 1 2 1 2 #3: 2 1 3 2 #4: 2 2 3 4 尝试在dplyrI中执行相同操作失败,因为第一个groupu by是持久的,并且分组是通过b和c进行的:

下面是一个简单的例子来说明这个问题:

library(data.table)
dt = data.table(a = c(1,1,2,2), b = 1:2)

dt[, c := cumsum(a), by = b][, d := cumsum(a), by = c]
#   a b c d
#1: 1 1 1 1
#2: 1 2 1 2
#3: 2 1 3 2
#4: 2 2 3 4
尝试在
dplyr
I中执行相同操作失败,因为第一个
groupu by
是持久的,并且分组是通过
b
c
进行的:

df = data.frame(a = c(1,1,2,2), b = 1:2)

df %.% group_by(b) %.% mutate(c = cumsum(a)) %.%
       group_by(c) %.% mutate(d = cumsum(a))
#  a b c d
#1 1 1 1 1
#2 1 2 1 1
#3 2 1 3 2
#4 2 2 3 2
这是一个bug还是一个特性?如果它是一项功能,那么如何在一条语句中复制
数据表
解决方案?

尝试以下方法:

> df %>% group_by(b) %>% mutate(c = cumsum(a)) %>%
+        group_by(c) %>% mutate(d = cumsum(a))
Source: local data frame [4 x 4]
Groups: c

  a b c d
1 1 1 1 1
2 1 2 1 2
3 2 1 3 2
4 2 2 3 4
更新


对于较新版本的dplyr,使用
%>%
而不是
%.%
解组
不再需要(根据David Arenburg的评论)。

谢谢,一个侧面相关的问题-知道为什么
df%.%group\u by(b)%.%summary(cumsum(a))
不起作用(以及如何起作用)使用
mutate
如下:
df%。%group\u by(b)%。%mutate(cumsum=cumsum(a))
谢谢,我想一个更好的例子是如何复制
dt[,rep(a,3),by=b]
?@eddi不确定这是否是你要问的,但是。。。mutate生成的变量与数据的长度相同。Summary生成与组数相同的变量。当我尝试使用data.frame或data.table作为输入的代码时,我在0.1.1和开发版本中得到了不同的结果。看到这一点,您还可以使用
groupby(c,add=F)
实际上,您编写的较新的
dplyr
版本将正常工作,因为
dplyr
会降低每个
mutate
/
summary
操作的聚合级别。