有没有比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用于未指定的非分组列。

我是否错过了现有的便捷语法,这会有所帮助吗?

最佳答案

这是使用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

关于r - dplyr:在group_by组内添加行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34551846/

10-12 17:44
查看更多