dplyr:在group_by组中添加行

时间:2015-12-31 21:45:54

标签: r grouping 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)))

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

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

df %>%
  group_by(a) %>%
  insert(b=0, .at=0) %>%
  insert(b=10)

append()类似,它可以默认在所有现有元素之后插入,并且可以足够智能地为未指定的任何列使用组值。对于未指定的非分组列,可能使用NA

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

1 个答案:

答案 0 :(得分:2)

以下是使用data.table的方法:

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]

(如果我们不关心保留名称c(0, b, 10)),我们可以在j中使用b

前者的优势在于即使df包含更多列也能正常工作 - 只需为fill = TRUE设置rbind.data.table