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

在R中基于配对变量批量生成新变量并对指定列标准化的方法

R语言批量衍生变量与指定列标准化实现方案

以下方案基于tidyverse生态实现,全程不需要手动指定50组变量的完整名称,适配符合命名规则的任意数量配对变量。

前置准备

首先加载依赖包,导入示例数据:

# 加载依赖包
library(tidyverse)

# 导入示例数据
df <- structure(list(Word_b = c("60", "70", "51", "73", "13", 
"60", "30"), Word_a = c("1", "10", "31", "30", "22", "5", 
"30"), Six_b = c("1", "3", "1", "0", "0", "0", "40"), Six_a = c("30", 
"50", "48", "41", "35", "0", "65"), Flute_b = c("1", "50", 
"52", "50", "45", "80", "30"), Flute_a = c("1", "10", "1", 
"0", "0", "0", "3"), VWordQ.13 = c(6.53, NA, 5.6, 5.6, 5.21, 
5.44, 6), VSixQ.22 = c(5.14, NA, 5.95, 3.25, 3.24, 3, 3), 
    VFluteQ.7 = c(6.68, NA, 5.6, 6.68, 6.92, NA, 6.68)), row.names = c(NA, 
-7L), class = c("tbl_df", "tbl", "data.frame"))

步骤1:批量生成[word]_c衍生变量

先自动识别所有[word]_a/[word]_b的配对变量前缀,统一将字符型的a/b列转换为数值型,再批量计算差值生成_c列:

# 自动提取所有配对变量的共同前缀
stems <- str_subset(names(df), "_a$") %>% str_remove("_a$")

# 转换数据类型并批量生成_c列
df <- df %>%
  mutate(across(matches("_[ab]$"), as.numeric)) %>%
  mutate(!!!map_dfc(stems, ~tibble(!!paste0(.x, "_c") := .data[[paste0(.x, "_a")]] - .data[[paste0(.x, "_b")]])))

运行后即可得到要求的中间结构,所有原列保留,新增对应_c列。

步骤2:标准化指定列

自动匹配所有_c结尾的列和符合V[word]Q.[number]格式的列,执行标准化处理,这里提供两种常用标准化方案可选:

# 识别需要标准化的列
std_cols <- str_subset(names(df), "_c$|^V.*Q\\.[0-9]+$")

# 方案1:Z-score标准化(均值为0,标准差为1,适合正态分布数据对比)
df_result <- df %>%
  mutate(across(all_of(std_cols), ~(.x - mean(.x, na.rm = TRUE))/sd(.x, na.rm = TRUE), .names = "{.col}_std"))

# 方案2:0-1归一化(所有值映射到0-1区间,适合不同取值范围数据直接对比)
# df_result <- df %>%
#   mutate(across(all_of(std_cols), ~(.x - min(.x, na.rm = TRUE))/(max(.x, na.rm = TRUE) - min(.x, na.rm = TRUE)), .names = "{.col}_std"))

标准化后的列会以原列名_std的后缀新增,不覆盖原始数据,方便后续校验。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:36:03