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

R语言批量将数据框正负值分别缩放到[0,1]和[-1,0]区间的实现方法

实现方案

核心缩放规则对每一列数值统一生效:

  • 列内所有正数除以该列的最大值,映射到[0,1]区间
  • 列内所有负数除以该列最小值的绝对值,映射到[-1,0]区间
  • 0值保持不变

两种实现方案都支持自动批量处理所有数值列,无需手动指定2000个列名:

方案1:tidyverse(dplyr)实现

适合习惯tidyverse语法的用户,非数值列会自动保留不处理:

library(dplyr)

# 自定义列缩放函数
custom_scale <- function(x) {
  if(!is.numeric(x)) return(x)
  max_val <- max(x, na.rm = TRUE)
  min_val <- min(x, na.rm = TRUE)
  res <- case_when(
    x > 0 ~ x / max_val,
    x < 0 ~ x / abs(min_val),
    TRUE ~ 0
  )
  # 如需和示例一致保留2位小数,可取消注释下行
  # res <- round(res, 2)
  return(res)
}

# 批量处理所有数值列
Output_df <- Input_df %>%
  mutate(across(where(is.numeric), custom_scale))

方案2:base R实现

无需安装任何第三方包,执行效率更高,适合大体积数据框处理:

# 自定义列缩放函数
custom_scale <- function(x) {
  if(!is.numeric(x)) return(x)
  max_val <- max(x, na.rm = TRUE)
  min_val <- min(x, na.rm = TRUE)
  res <- ifelse(x > 0, x/max_val, ifelse(x < 0, x/abs(min_val), 0))
  # 如需保留2位小数,可取消注释下行
  # res <- round(res, 2)
  return(res)
}

# 批量应用到所有列
Output_df <- as.data.frame(lapply(Input_df, custom_scale))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 19:57:03