你可以使用相同的合併和彙總在一點點更可讀的方式。將實際的df合併到左外部連接all.x = TRUE
上將會完成這項工作。我希望這更好理解。
df <- data.frame(id=c(01,02,03,04),category=c("AB","BC","AB","CD"),
quantity=c(235,987,366,287))
df <- merge(df,aggregate(quantity ~ category, data=df, sum),"category",all.x = TRUE)
names(df)[4] <- "sum.category"
df
# category id quantity.x sum.category
# AB 1 235 601
# AB 3 366 601
# BC 2 987 987
# CD 4 287 287
如果你還想要一個更易於理解的方式,那麼sql是最好的選擇。爲此,您可能需要sqldf
庫。我們正在做同樣的聚合,並以sql方式合併回實際的df。它更像是一個自我加入的事物。和SQL代碼相當容易理解
library (sqldf)
dfnew<-sqldf("select a.*,b.sum_quantity
from df a left join
(select category, sum(quantity) sum_category
from df group by 1) b
on a.category=b.category")
dfnew
# category id quantity sum_category
# AB 1 235 601
# BC 2 987 987
# AB 3 366 601
# CD 4 287 287
@帕斯卡爾:做完了,抱歉給您帶來不便 – Malta