R语言计算列值差值:生成DX与各DR列差值对应的PV变量
R实现DX与各DR列差值计算生成PV变量
两种常用实现方式如下:
方法1:dplyr实现(推荐,代码简洁易维护)
核心使用across()批量处理所有DR开头的列,自动生成对应PV列:
# 加载包 library(dplyr) library(stringr) # 计算生成PV列 df_with_pv <- df %>% mutate(across(starts_with("DR"), ~ DX - .x, .names = "PV{str_remove(.col, 'DR')}"))
参数说明:
starts_with("DR"):选中所有列名以DR开头的字段,不需要手动指定DR0到DR5.names = "PV{str_remove(.col, 'DR')}":将生成的新列命名为PV+原DR列的后缀,比如DR0对应PV0、DR1对应PV1- 若不想额外加载stringr包,可将
.names参数修改为:.names = "PV{sub('DR', '', .col)}"
方法2:Base R实现,无需安装加载额外包
# 识别所有DR列和要生成的PV列名 dr_cols <- grep("^DR", colnames(df), value = TRUE) pv_cols <- sub("DR", "PV", dr_cols) # 批量计算差值 df[pv_cols] <- df$DX - df[dr_cols]
结果验证
取你给出的示例行(2021年1月3日Super房型)查看输出:
df_with_pv[df_with_pv$date == "03-01-2021" & df_with_pv$Room == "Super", c("date", "Room", "DX", "DR0", "PV0", "DR1", "PV1", "DR2", "PV2")]
输出结果如下,完全符合规则要求:
date Room DX DR0 PV0 DR1 PV1 DR2 PV2 14 03-01-2021 Super 25 19 6 19 6 23 2
内容的提问来源于stack exchange,提问作者user16615791
相关产品推荐
相关产品推荐

