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

R按名称选取dataframe列与向量逐元素相乘保留其余列方法咨询

可行实现方案

方案1:结合dplyr选列+base R赋值(最简,和你原有写法兼容性最高)

你之前的报错是因为dplyr没有提供select<-赋值方法,只需要把赋值操作改用base R的列索引语法即可,既保留按名称规则选列的便利,也不会丢失其他列:

library(dplyr)

# 按规则定位要修改的列
target_cols <- num_range("Pdt_d", 0:2) %>% eval_select(my_df)
# 将乘法结果直接赋值回原数据框对应列
my_df[target_cols] <- mapply(`*`, my_df[target_cols], my_vec)

运行后原数据框的year、month、Pdt_tot列保持不变,Pdt_d0~Pdt_d2会分别乘以my_vec对应位置的元素。

方案2:纯tidyverse风格(使用mutate+across)

如果不想修改原数据框,偏好纯dplyr管道写法,可以用across结合列位置匹配实现:

library(dplyr)

result <- my_df %>%
  mutate(across(num_range("Pdt_d", 0:2),
                ~ .x * my_vec[match(cur_column(), names(pick(num_range("Pdt_d", 0:2))))]))

运行后result为修改后的新数据框,原数据框保持不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:54:02