R语言中将DR01开头列的空单元格替换为数字0的实现方法
R语言指定前缀列空值替换解决方案
需求说明
将数据集中所有列名以DR0开头的列中的空字符串替换为数字0,不影响其他列的数值。
正确实现代码
方法1:dplyr(tidyverse生态)写法
适配dplyr 1.0.0及以上版本,是tidyverse标准的批量列处理写法:
library(dplyr) df1 <- df1 %>% mutate(across(starts_with("DR0"), ~ifelse(.x == "", 0, .x)))
如果使用的是1.0.0以下的旧版dplyr,使用mutate_at实现:
df1 <- df1 %>% mutate_at(vars(starts_with("DR0")), ~ifelse(. == "", 0, .))
方法2:基础R写法
无需加载额外依赖包,运行效率更高:
# 匹配所有以DR0开头的列索引 dr0_col_index <- grep("^DR0", colnames(df1)) # 仅对匹配列的空字符串赋值为0 df1[dr0_col_index][df1[dr0_col_index] == ""] <- 0
原有代码无法运行的原因
你写的df1 %>% select(starts_with("DR0")=="")<-0存在两处逻辑错误:
starts_with("DR0")是dplyr提供的列选择辅助函数,返回的是匹配前缀的列的位置信息,不能直接和空字符串做等值判断select函数的作用是筛选数据集的列,无法直接对列内的单元格数值做赋值修改
补充优化建议
替换完成后,所有DR0开头的列因为之前存在空字符串,默认是字符类型,你可以统一转为数值类型方便后续统计计算:
df1 <- df1 %>% mutate(across(starts_with("DR0"), as.numeric))
内容的提问来源于stack exchange,提问作者Antonio
相关产品推荐
相关产品推荐

