如何在R数据框中将所有0 (0.00%)格式的内容替换为0
解决方案
你使用str_replace_all未生效的常见原因是没有批量应用到所有Grade开头的目标列,或者正则匹配时没有处理特殊字符,以下是两种可行方案:
方案1:tidyverse 生态实现(推荐)
借助dplyr的across批量处理目标列,搭配stringr的字符串替换功能:
library(dplyr) library(stringr) df_result <- df %>% # 匹配所有列名以Grade开头的列,批量做替换 mutate(across(starts_with("Grade"), # 用fixed匹配固定字符串,避免正则转义问题 ~ str_replace(.x, fixed("0 (0.00%)"), "0")))
如果后续你需要把所有数字 (百分比)格式的内容都统一保留前面的数字,可以用更通用的提取逻辑:
df_result <- df %>% mutate(across(starts_with("Grade"), ~ str_extract(.x, "^\\d+")))
方案2:Base R 实现(无需加载额外包)
# 定位所有Grade开头的列的索引 grade_col_idx <- grep("^Grade", colnames(df)) # 批量替换 df[grade_col_idx] <- lapply(df[grade_col_idx], function(col) { col[col == "0 (0.00%)"] <- "0" return(col) })
内容的提问来源于stack exchange,提问作者Stataq
相关产品推荐
相关产品推荐

