如何在R语言中计算Data Frame的边际成本?
在R中计算边际成本的解决方案
原始数据
| Year | Cost | quantity shipped |
|---|---|---|
| 2000 | 63.01359 | 2270 |
| 2001 | 61.64063 | 2558 |
| 2002 | 66.54081 | 3279 |
| 2003 | 64.02072 | 3656 |
| 2004 | 60.52792 | 3721 |
需求说明
需新增Marginal cost列,计算规则为:
- 2000年值为0
- 其余年份按公式:**(当年成本 - 上年成本)/(当年发货量 - 上年发货量)**计算,结果保留5位小数
方法1:基础R实现(无需额外包)
# 构造数据框 df <- data.frame( Year = c(2000, 2001, 2002, 2003, 2004), Cost = c(63.01359, 61.64063, 66.54081, 64.02072, 60.52792), quantity_shipped = c(2270, 2558, 3279, 3656, 3721) ) # 计算边际成本:diff()获取相邻行差值,首行补0 marginal_cost <- c(0, diff(df$Cost) / diff(df$quantity_shipped)) # 添加列并保留5位小数 df$Marginal_cost <- round(marginal_cost, 5) # 输出结果 print(df)
运行后结果:
| Year | Cost | quantity_shipped | Marginal_cost |
|---|---|---|---|
| 2000 | 63.01359 | 2270 | 0.00000 |
| 2001 | 61.64063 | 2558 | -0.00476 |
| 2002 | 66.54081 | 3279 | 0.00680 |
| 2003 | 64.02072 | 3656 | -0.00669 |
| 2004 | 60.52792 | 3721 | -0.05374 |
方法2:dplyr包实现(管道式操作更直观)
如果习惯使用tidyverse生态,用lag()函数直接引用上一行数据:
library(dplyr) # 构造数据框 df <- data.frame( Year = c(2000, 2001, 2002, 2003, 2004), Cost = c(63.01359, 61.64063, 66.54081, 64.02072, 60.52792), quantity_shipped = c(2270, 2558, 3279, 3656, 3721) ) # 计算并添加边际成本列 df <- df %>% mutate( Marginal_cost = case_when( Year == 2000 ~ 0, TRUE ~ (Cost - lag(Cost)) / (quantity_shipped - lag(quantity_shipped)) ) %>% round(5) ) # 输出结果 print(df)
两种方法最终结果完全一致,可根据个人习惯选择。
内容的提问来源于stack exchange,提问作者Henry Liu
相关产品推荐
相关产品推荐

