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

如何使用dplyr批量替换多变量中的-999为NA(含同类/异类变量)

批量替换数据框中的-999为NA

方法1:替换所有变量(tidyverse)

用dplyr的across()结合na_if()可以快速将所有列中的-999替换为NA,代码简洁直观:

library(dplyr)

# 处理第一个数据框df
df_clean <- df %>%
  mutate(across(everything(), na_if, y = -999))

# 处理第二个数据框df.2(所有变量替换)
df.2_clean_all <- df.2 %>%
  mutate(across(everything(), na_if, y = -999))

across(everything())选中数据框的所有列,na_if()会自动将指定值(此处为-999)替换为NA。

方法2:替换指定变量(含模式匹配的变量)

如果仅需替换age、money.usd以及所有以cars.开头的变量,可结合列名匹配函数实现:

# 处理df.2,指定目标变量替换
df.2_clean_target <- df.2 %>%
  mutate(across(c(age, money.usd, starts_with("cars")), na_if, y = -999))
  • starts_with("cars")会匹配所有以cars开头的列(如cars.1、cars.2)
  • 若需更精准的正则匹配,可改用matches("^cars\\."),仅匹配以cars.开头的列

方法3:Base R 实现

如果不使用tidyverse,Base R也能完成需求:

# 所有变量替换
df_clean_base <- df
df_clean_base[df_clean_base == -999] <- NA

# 指定变量替换
# 先筛选目标列名
target_vars <- c("age", "money.usd", grep("^cars\\.", names(df.2), value = TRUE))
df.2_clean_base <- df.2
df.2_clean_base[target_vars][df.2_clean_base[target_vars] == -999] <- NA

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:15:42