如何在RStudio中查找分类/字符类型的缺失值?
检测字符/分类类型数据的缺失值
字符型数据的缺失值检测
R里字符型的缺失值不止NA一种,常见的还有空字符串"",甚至有时候会出现字符串形式的"NA",分情况处理:
检测原生
NA:和数值型一样,直接用is.na(),它对字符型完全有效:char_vec <- c("apple", NA, "banana", "") is.na(char_vec) # 输出:FALSE TRUE FALSE FALSE检测空字符串
"":直接用等于判断或者检查字符长度:# 直接判断空字符串 char_vec == "" # 输出:FALSE FALSE FALSE TRUE # 通过字符长度判断(空字符串长度为0) nchar(char_vec) == 0 # 输出:FALSE FALSE FALSE TRUE同时检测
NA和空字符串:用逻辑或|把两个条件合并:is.na(char_vec) | char_vec == "" # 输出:FALSE TRUE FALSE TRUE处理字符串形式的
"NA":如果数据里把"NA"当成普通字符串存着,需要额外加判断:char_vec2 <- c("apple", "NA", "banana", "") # 覆盖三种缺失情况:NA、空字符串、"NA"字符串 is.na(char_vec2) | char_vec2 == "" | char_vec2 == "NA" # 输出:FALSE TRUE FALSE TRUE
分类(factor)类型数据的缺失值检测
因子类型的缺失值就是原生的NA,直接用is.na()就能检测:
factor_vec <- factor(c("cat", "dog", NA, "bird")) is.na(factor_vec) # 输出:FALSE FALSE TRUE FALSE
如果因子里把空字符串设为了合法水平,要同时检测NA和空水平:
factor_vec2 <- factor(c("cat", "", "dog"), levels = c("", "cat", "dog")) is.na(factor_vec2) | factor_vec2 == "" # 输出:FALSE TRUE FALSE
批量处理数据框中的字符/分类列
要是想在数据框里批量处理所有字符和因子列的缺失值,两种方法可选:
基础R实现
df <- data.frame( num_col = c(1, NA, 3), char_col = c("x", "", NA), fact_col = factor(c("a", NA, "b")) ) # 筛选出字符和因子列,批量检测缺失 sapply(df[, sapply(df, function(col) is.character(col) | is.factor(col))], function(col) is.na(col) | (is.character(col) & col == ""))
dplyr实现
library(dplyr) df %>% mutate(across(c(where(is.character), where(is.factor)), ~ is.na(.) | (is.character(.) & . == "")))
内容的提问来源于stack exchange,提问作者franklin Wiese
相关产品推荐
相关产品推荐

