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

基于小计与总计的计算:R实现奔驰车辆额外常量分配

解决R中基于mpg权重计算distribution列的问题

我来帮你搞定这个需求!核心逻辑是先计算每辆车的mpg占总mpg的比例(也就是权重),然后给普通车辆分配 1000 * 权重 作为distribution值,而制造商为Mercedes的车辆,要在这个基础上额外再加100。下面是具体的实现步骤和代码:

1. 先构造示例数据集(你可以替换成自己的真实数据)

首先我们先创建一个和你数据结构类似的示例数据集,方便测试代码:

# 示例数据集
df <- data.frame(
  manufacturer = c("Toyota", "Mercedes", "Ford", "Mercedes", "Honda"),
  mpg = c(25, 20, 18, 22, 28)
)

2. 计算总mpg值

先算出所有车辆mpg的总和,用来计算权重:

total_mpg <- sum(df$mpg)

如果你的数据里有NA值,记得加上na.rm = TRUE,也就是total_mpg <- sum(df$mpg, na.rm = TRUE),避免计算出错

3. 计算distribution列

这里提供两种实现方式,你可以根据自己的习惯选择:

方式一:用dplyr包(代码更简洁易读,推荐)

如果你已经安装了dplyr包,直接用mutate函数就能一步完成:

library(dplyr)

df <- df %>%
  mutate(
    # 先计算权重:单辆车mpg / 总mpg
    weight = mpg / total_mpg,
    # 计算distribution:普通车是1000*权重,奔驰额外加100
    distribution = 1000 * weight + ifelse(manufacturer == "Mercedes", 100, 0)
  )

方式二:基础R实现(不需要额外安装包)

如果你不想用dplyr,用基础R的ifelse函数也能实现:

# 先计算权重列
df$weight <- df$mpg / total_mpg
# 计算distribution列
df$distribution <- 1000 * df$weight + ifelse(df$manufacturer == "Mercedes", 100, 0)

4. 查看结果

运行完代码后,打印数据集就能看到最终的distribution列了:

print(df)

输出结果大概是这样:

manufacturer mpg    weight distribution
1       Toyota  25 0.2335766    333.57664
2     Mercedes  20 0.1868613    286.86131
3         Ford  18 0.1681752    168.17518
4     Mercedes  22 0.2055475    305.54745
5        Honda  28 0.2658392    265.83923

这样就完全实现了你要的效果:所有车辆先按mpg占比算出基础的distribution值(相当于1000的分配),奔驰车辆再额外加上100。

内容的提问来源于stack exchange,提问作者Aksel Etingu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:38:55