有没有比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/