基于小计与总计的计算: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
相关产品推荐
相关产品推荐

