dplyr:按组在组_中添加行

dplyr:按组在组_中添加行,r,grouping,dplyr,R,Grouping,Dplyr,在group\u by()组中添加行是否有比使用bind\u rows()更好的方法?下面是一个有点笨重的例子: df <- data.frame(a=c(1,1,1,2,2), b=1:5) df %>% group_by(a) %>% do(bind_rows(data.frame(a=.$a[1], b=0), ., data.frame(a=.$a[1], b=10))) 与append()类似,它可以默认在所有现有元素之后插入,并且可以足够聪明地为任何未指

group\u by()
组中添加行是否有比使用
bind\u rows()
更好的方法?下面是一个有点笨重的例子:

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

df %>%
  group_by(a) %>%
  do(bind_rows(data.frame(a=.$a[1], b=0), ., data.frame(a=.$a[1], b=10)))
append()
类似,它可以默认在所有现有元素之后插入,并且可以足够聪明地为任何未指定的列使用组值。对于未指定的非分组列,可以使用
NA


是否有一种我已经错过的方便语法,或者这会有帮助?

这里有一种使用
数据的方法。表

library(data.table)
setDT(df)

rbind(df, expand.grid(b = c(0, 10), a = df[ , unique(a)]))[order(a, b)]
根据您的实际情况,这一简单得多的替代方案也适用:

df[ , .(b = c(0, b, 10)), by = a]
(如果我们不想保留名称
b
,我们可以在
j
中简单地使用
c(0,b,10)

前者的优点是,即使
df
有更多的列,它也能工作——只需为
rbind.data.table设置
fill=TRUE
df%>%groupby(a)%>%do(data.frame(b=c(0,.$b,10))
是一种方法,如果您喜欢dplyr的话。
df[ , .(b = c(0, b, 10)), by = a]