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
相关产品推荐
相关产品推荐

