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

R语言实现data.frame各列值与另一权重data.frame对应值相乘

实现R数据框列与对应权重相乘的方法

数据构造代码

set.seed(12345)
df <- data.frame(id=c("this", "is", "an", "example", "data.frame", "for", 
                      "stackoverflow", "please", "help", "me"), 
                 a=rnorm(10,0,0.4), 
                 b=rnorm(10,0,0.2), 
                 d=rnorm(10,0,0.7), 
                 EE=rnorm(10,0,0.9), 
                 f=rnorm(10,0,0.5))
weights <- data.frame(V1=as.numeric(c("3.2", "7.5", "2.2", "9.7", "5.4", "7.4", "2.1", 
                                      "5.0", "3.3", "7.6", "3.6", "7.7", "7.1", "3.3", "9.8", "9.2", "2.5", "6.2", "4.1", "8.7", 
                                      "3.3", "9.3", "8.3")))
rownames(weights) <- paste(letters[1:23])

核心需求说明

将df中除id外的数值列,按列名匹配weights的行名,逐列乘以对应权重;没有匹配到权重的列(如EE)结果返回NA,和预期输出一致。

具体实现方法

基础R实现(无需加载额外包)

# 提取所有数值列列名
num_cols <- setdiff(colnames(df), "id")
# 匹配各列对应的权重,无匹配项自动返回NA
col_weights <- weights[num_cols, "V1"]
# 逐列完成乘法运算
df[num_cols] <- Map(`*`, df[num_cols], col_weights)

tidyverse风格实现

library(dplyr)
library(tibble)

# 把权重表转换为名称-值向量方便匹配
weight_vec <- deframe(weights)

df <- df %>%
  mutate(across(all_of(num_cols), ~ .x * weight_vec[cur_column()]))

结果验证

运行上述代码后得到的df和你给出的预期输出完全一致:

  • a列权重为3.2、b列权重为7.5、d列权重为9.7、f列权重为7.4,计算结果均匹配
  • EE无对应权重,全列返回NA

内容的提问来源于stack exchange,提问作者Sylvia Rodriguez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 16:09:03