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

如何按列名对多列执行相同规则的数值重编码?

解决方案

dplyr 实现(推荐)

新版本语法(across,替代已软弃用的mutate_at)

用across指定目标列,结合case_when清晰定义重编码规则,当前处理的列用.x指代:

library(dplyr)

df <- df %>%
  mutate(across(
    .cols = c("col1", "col4", "col9"),
    .fns = ~ case_when(
      .x == "N" ~ 0,
      .x %in% c("Y", "S") ~ 1,
      .x == "O" ~ 2,
      .x == "F" ~ 99,
      TRUE ~ NA_real_ # 处理规则外的意外值
    )
  ))

兼容旧版的mutate_at写法

如果你的dplyr版本较低,可继续用mutate_at,当前列用.指代:

df <- df %>%
  mutate_at(
    .vars = c("col1", "col4", "col9"),
    .funs = ~ case_when(
      . == "N" ~ 0,
      . %in% c("Y", "S") ~ 1,
      . == "O" ~ 2,
      . == "F" ~ 99,
      TRUE ~ NA_real_
    )
  )

Base R 实现

无需依赖dplyr,用映射表+lapply处理指定列:

# 定义目标列
target_cols <- c("col1", "col4", "col9")

# 创建字符到数值的映射表
code_map <- c(N = 0, Y = 1, S = 1, O = 2, F = 99)

# 对目标列批量重编码
df[target_cols] <- lapply(df[target_cols], function(x) unname(code_map[x]))

这种方式通过映射表直接匹配替换,代码更简洁,处理大量列时效率也更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 11:45:32