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
相关产品推荐
相关产品推荐

