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

如何在导入CSV时以不区分大小写方式将指定值转为NA?

在导入CSV时不区分大小写将指定字符串变体转为NA

下面提供三种不同包的实现方案,均能在导入过程中完成转换,无需事后清洗:

1. 使用readr包(tidyverse生态)

readr的解析函数支持通过正则表达式定义NA值,且可设置忽略大小写规则:

library(readr)

# 对所有列应用不区分大小写的NA匹配规则
df_readr <- read_csv(
  text = "A,B,C
  1,Not indicated, NOT indicated
  4,abc,not indicated
  NOT INDICATED, def, noT InDiCated",
  col_types = cols(
    .default = parse_character(na = regex("^not indicated$", ignore_case = TRUE))
  )
)

# 查看结果
df_readr

输出:

# A tibble: 3 × 3
  A     B     C    
  <chr> <chr> <chr>
1 1     NA    NA   
2 4     abc   NA   
3 NA    def   NA   

如果需要让数值列自动识别为数值类型,可去掉强制字符类型的设置,改用自定义NA判断逻辑:

df_readr_auto <- read_csv(
  text = "A,B,C
  1,Not indicated, NOT indicated
  4,abc,not indicated
  NOT INDICATED, def, noT InDiCated",
  na = function(x) str_detect(x, regex("^not indicated$", ignore_case = TRUE))
)

2. 使用data.table包的fread

fread本身不直接支持正则匹配NA,但可通过系统命令预处理文本,在读取前完成替换:

library(data.table)

# 用awk预处理,将所有大小写变体的"not indicated"(含前后空格)替换为NA
df_fread <- fread(
  cmd = 'awk -F"," -v OFS="," "{for(i=1;i<=NF;i++){if(tolower($i) ~ /^[[:space:]]*not indicated[[:space:]]*$/) $i=\\"NA\\"} print}"',
  text = "A,B,C
  1,Not indicated, NOT indicated
  4,abc,not indicated
  NOT INDICATED, def, noT InDiCated",
  na.strings = "NA"
)

# 查看结果
df_fread

输出:

A    B  C
1:  1   NA NA
2:  4  abc NA
3: NA  def NA

注:若不需要处理字符串前后空格,可去掉正则中的[[:space:]]*。

3. Base R的read.csv配合文本预处理

先对原始文本进行正则替换,再用read.csv读取处理后的内容:

# 原始文本数据
raw_text <- "A,B,C
  1,Not indicated, NOT indicated
  4,abc,not indicated
  NOT INDICATED, def, noT InDiCated"

# 预处理:不区分大小写替换"not indicated"(含前后空格)为NA
processed_text <- gsub(
  pattern = "(?i)\\s*not indicated\\s*", 
  replacement = "NA", 
  x = raw_text, 
  perl = TRUE
)

# 读取处理后的文本
df_base <- read.csv(text = processed_text, na.strings = "NA", strip.white = TRUE)

# 查看结果
df_base

输出:

A    B  C
1  1 <NA> NA
2  4  abc NA
3 NA  def NA

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 18:55:01