如何用R语言基于两个data.frame生成加权计算的新列?
实现方法
你可以用两种常见的R方案来完成这个需求,不管是base R还是tidyverse都很方便,我给你详细说明:
方法一:Base R 实现
首先我们先把df2里的乘数因子转换成命名向量,这样可以通过列名直接调用对应系数,比硬写数字更灵活:
# 从df2提取命名系数向量 coefs <- setNames(df2$q, df2$p)
接下来基于df1创建df3,并新增new列,按照你要求的公式计算行平均值:
# 复制df1到df3 df3 <- df1 # 计算new列:(b*1.43 + c*2.14) 与 (d*(-2.03)) 的行平均值 df3$new <- (df3$b * coefs["b"] + df3$c * coefs["c"] + df3$d * coefs["d"]) / 2
方法二:Tidyverse (dplyr) 实现
如果你习惯用tidyverse的管道风格,代码会更简洁:
# 加载dplyr包(如果没安装先运行 install.packages("dplyr")) library(dplyr) # 同样先提取命名系数向量 coefs <- setNames(df2$q, df2$p) # 用mutate新增列 df3 <- df1 %>% mutate(new = (b * coefs["b"] + c * coefs["c"] + d * coefs["d"]) / 2)
说明
- 命名向量
coefs的好处是:如果后续df2里的乘数因子有变化,你不需要修改计算逻辑的代码,只需要保证df2的p列对应b/c/d即可。 - 公式逻辑完全按照你的要求:先计算
b*1.43 + c*2.14,再加上d*(-2.03),最后除以2得到这两个部分的行平均值。 - 最终的df3会保留df1的所有原有列(a、b、c、d),同时新增
new列,结构完全符合你的需求。
内容的提问来源于stack exchange,提问作者Sylvia Rodriguez
相关产品推荐
相关产品推荐

