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

R语言批量替换DataFrame指定前缀列的缺失值

批量替换不同前缀列的缺失值

问题场景

我有一个带相似前缀列的数据集,创建代码如下(修正了原始代码的向量定义格式,确保能正常运行):

CropType <- c("maize", "beans", "peas")
NumberSM <- c(200, 300, NA)
PercentageSM <- c("90%", "50%", NA)
NumberLM <- c(600, NA, 234)
PercentageLM <- c("20%", NA, "78%")
df1 <- data.frame(CropType, NumberSM, PercentageSM, NumberLM, PercentageLM)

需要用一行代码完成两个操作:

  • 所有以Number开头的列,把缺失值(NA)替换为0.0
  • 所有以Percentage开头的列,把缺失值替换为0.0%

期望的处理后数据集对应代码:

CropType <- c("maize", "beans", "peas")
NumberSM <- c(200, 300, 0.0)
PercentageSM <- c("90%", "50%", "0.0%")
NumberLM <- c(600, 0.0, 234)
PercentageLM <- c("20%", "0.0%", "78%")
df1 <- data.frame(CropType, NumberSM, PercentageSM, NumberLM, PercentageLM)

之前的尝试需要逐个指定列名,列多的时候效率很低:

df1 %>%
  mutate(NumberLM = replace(NumberLM, is.na(NumberLM), 0.0),
         PercentageLM = replace(PercentageLM, is.na(PercentageLM), '0.0%'))

解决方案

使用dplyr包的across()函数批量匹配列前缀,一行代码搞定所有列的缺失值替换:

library(dplyr)
df1 <- df1 %>% mutate(across(starts_with("Number"), ~replace(.x, is.na(.x), 0.0)), across(starts_with("Percentage"), ~replace(.x, is.na(.x), "0.0%")))

代码解释

  • starts_with("Number"):自动匹配所有以Number开头的列,不用手动列出来
  • starts_with("Percentage"):同理匹配所有以Percentage开头的列
  • ~replace(.x, is.na(.x), 替换值):对每一列执行缺失值替换,.x指代当前处理的列

不管后续新增多少同前缀的列,这段代码都能自动处理,不用修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 23:03:19