R语言如何计算数据框列表列按订单ID的乘积和(订单小计)
R语言list列逐行计算订单小计的实现方法
核心逻辑为逐行提取对应订单的数量向量、价格向量,计算乘积后求和即可得到订单小计,以下是两种可直接落地的实现方案:
前置测试数据构造
先基于你给出的示例构造带list列的标准数据框:
# 加载依赖包,未安装可先运行 install.packages("tidyverse") library(tidyverse) # 构造数量、价格两个list向量 quantity <- list( a = c(1,2,3), b = 1:2, c = c(3,1) ) price <- list( P1 = c(12,13,4), P2 = c(2,4), P3 = c(12,1) ) # 生成目标数据框 order_df <- tibble( Order = names(quantity), Quantity = quantity, Price = price )
方法1:rowwise逐行处理(易读性优先)
适合中小数据量,语法直观易理解:
order_df <- order_df %>% rowwise() %>% # 按行分组 mutate(Subtotal = sum(Quantity * Price)) %>% # 逐行计算乘积和 ungroup() # 处理完成后取消行分组,避免影响后续操作
方法2:map2迭代处理(性能优先)
适合十万行以上的大数据量场景,执行效率更高:
order_df <- order_df %>% mutate(Subtotal = map2_dbl(Quantity, Price, ~ sum(.x * .y)))
map2_dbl会并行迭代Quantity和Price两个list列的对应元素,计算完成后直接返回数值型的小计列。
两种方案运行后,查看order_df$Subtotal即可得到预期结果 50 10 37。
内容的提问来源于stack exchange,提问作者Joe Ng
相关产品推荐
相关产品推荐

