dplyr:在group_by组中添加行

Ken*_*ams 6 grouping r dplyr

是否有更好的方法在group_by()组内添加行而不是使用bind_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)))
Run Code Online (Sandbox Code Playgroud)

我们的想法是,我们已经分组的列可以从组中推断出来.

我想知道这样的事情是否可以起作用:

df %>%
  group_by(a) %>%
  insert(b=0, .at=0) %>%
  insert(b=10)
Run Code Online (Sandbox Code Playgroud)

比如append(),它可以默认插入所有现有元素之后,并且可以足够聪明地为未指定的任何列使用组值.也许NA用于未指定的非分组列.

是否存在我错过的现有方便语法,或者这会有用吗?

Mic*_*ico 2

这是一种使用的方法data.table

library(data.table)
setDT(df)

rbind(df, expand.grid(b = c(0, 10), a = df[ , unique(a)]))[order(a, b)]
Run Code Online (Sandbox Code Playgroud)

根据您的实际情况,这个更简单的替代方案也可以工作:

df[ , .(b = c(0, b, 10)), by = a]
Run Code Online (Sandbox Code Playgroud)

(如果我们不关心保留名称,我们可以简单地使用c(0, b, 10)in )jb

前者的优点是,即使有df更多列,它也能工作——只需设置fill = TRUErbind.data.table