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]