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

使用across()依次执行Recode重编码与rescale缩放的问题排查

问题根因

代码跑不出预期结果是两个写法错误:

  • R的自定义函数默认返回最后一行的运算结果,你在匿名函数里跑完重编码、缩放逻辑之后,最后单独写了一行.x,等于直接把原始列值返回了,前面的计算结果全被丢弃
  • 括号位置写错了:to=c(0,1)这个缩放参数被你写到了as.numeric()的参数列表里,根本没传给scales::rescale(),就算返回前面的计算值,缩放逻辑也不对
修正后可运行代码
var1 <- sample(seq(1,11,1), size=100, replace=T)
var2 <- sample(seq(1,11,1), size=100, replace=T)
library(tidyverse)
library(scales)
df <- data.frame(var1, var2)

# 写法1:分步写逻辑,可读性更高
df %>% 
  mutate(
    across(
      starts_with("var"), 
      ~{
        recoded_res <- car::Recode(.x, "11=5")
        scales::rescale(as.numeric(recoded_res), to = c(0,1))
      }
    )
  )

# 写法2:函数嵌套简写,逻辑从内到外执行:重编码→转数值→缩放到0-1
df %>% 
  mutate(
    across(
      starts_with("var"),
      ~scales::rescale(as.numeric(car::Recode(.x, "11=5")), to = c(0,1))
    )
  )

两种写法效果完全一致:重编码后所有值的取值范围是1-5,rescale会自动把最小值1映射为0,最大值5映射为1,中间值按线性比例换算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 01:27:29