如何按order对tibble数据行进行聚合计算?
按itemID聚合计算order与n的乘积之和
数据复现代码
df <- structure(list(itemID = c(9, 11, 19, 26, 26, 26, 35, 35, 35, 35), order = c(1, 1, 1, 1, 2, 3, 1, 2, 3, 4), dayR = structure(c(17532, 17532, 17532, 17532, 17532, 17532, 17532, 17532, 17532, 17532 ), class = "Date"), n = c(1L, 1L, 2L, 96L, 5L, 1L, 379L, 23L, 4L, 1L)), row.names = c(NA, -10L), class = c("tbl_df", "tbl", "data.frame"))
解决方案(dplyr 方法)
适合处理tibble格式数据,用tidyverse工具链实现分组聚合:
library(dplyr) result <- df %>% group_by(itemID, dayR) %>% summarize(n = sum(order * n), .groups = "drop") # 查看结果 print(result)
运行输出结果:
# A tibble: 5 × 3 itemID dayR n <dbl> <date> <int> 1 9 2018-01-01 1 2 11 2018-01-01 1 3 19 2018-01-01 2 4 26 2018-01-01 109 5 35 2018-01-01 442
解决方案(Base R 方法)
无需加载额外包,用基础R函数实现:
# 简洁写法 result_base <- transform( aggregate(order * n ~ itemID + dayR, df, sum), n = `order * n` ) %>% select(-`order * n`)
内容的提问来源于stack exchange,提问作者JAdel
相关产品推荐
相关产品推荐

