You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调用menu数据框信息计算5种水果排列组合的总价?

带放回水果排列的总价计算方案

需求背景

生成所有带放回选取5个水果的排列,并为每组排列计算总费用,现有代码已生成包含5列水果的permutations数据框,需新增总价列。

解决方案

核心思路是先创建水果-价格的匹配映射,再批量将每行的水果转换为价格并求和,无需单独生成每列价格,效率更高。

步骤1:优化菜单数据(可选,更简洁)

原代码创建menu的方式可以简化,直接合并成一个数据框:

menu = data.frame(
  Fruit = c("apple", "banana", "orange", "pear", "strawberry"),
  Price = c(0.99, 1.59, 0.70, 1.29, 2.99)
)

步骤2:创建价格查找向量

将menu转换为命名向量,用水果名作为名称,价格作为对应值,方便快速匹配:

price_lookup = setNames(menu$Price, menu$Fruit)

步骤3:计算每行总价并添加到数据框

提供两种实现方法:

方法1:基础R(无需额外包)

通过sapply将每列水果转换为价格,再用rowSums求和:

# 生成排列(保留原逻辑)
fruit_vector = menu$Fruit
permutations = data.frame(expand.grid(
  Fruit_1 = fruit_vector,
  Fruit_2 = fruit_vector,
  Fruit_3 = fruit_vector,
  Fruit_4 = fruit_vector,
  Fruit_5 = fruit_vector
))

# 添加总价列
permutations$Total_Price = rowSums(sapply(permutations, function(col) price_lookup[col]))
方法2:dplyr包(更直观的行操作)

如果习惯用tidyverse语法,可使用rowwise逐行计算:

library(dplyr)

permutations = permutations %>%
  rowwise() %>%
  mutate(Total_Price = sum(price_lookup[c(Fruit_1, Fruit_2, Fruit_3, Fruit_4, Fruit_5)])) %>%
  ungroup()

完整可运行代码

# 创建水果菜单
menu = data.frame(
  Fruit = c("apple", "banana", "orange", "pear", "strawberry"),
  Price = c(0.99, 1.59, 0.70, 1.29, 2.99)
)

# 生成所有带放回的5个水果排列
fruit_vector = menu$Fruit
permutations = data.frame(expand.grid(
  Fruit_1 = fruit_vector,
  Fruit_2 = fruit_vector,
  Fruit_3 = fruit_vector,
  Fruit_4 = fruit_vector,
  Fruit_5 = fruit_vector
))

# 创建价格查找映射
price_lookup = setNames(menu$Price, menu$Fruit)

# 添加总价列
permutations$Total_Price = rowSums(sapply(permutations, function(col) price_lookup[col]))

# 查看结果示例
head(permutations)

内容的提问来源于stack exchange,提问作者Tommy Cassilly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 17:25:26