首页 > 解决方案 > 如何处理R中逻辑类型列中的缺失值

问题描述

我有一个逻辑类型列 Self_Employed,值为 TRUE 和 FALSE,它缺少值,这意味着说“员工”不是自雇人士。我想在列中估算“缺失”类别

class(df$Self_Employed)
[1] "logical"

levels(df$Self_Employed)
NULL

sum(is.na(df$Self_Employed))
[1] 210

table(df$Self_Employed)
 FALSE   TRUE 
  1561    271

获取类为“逻辑”,级别为 NULL,缺失总和为 210,表格显示真假总数。

估算缺失首先我转换为因子,然后我估算缺失,但不填充,仅显示 NA 和仅显示 TRUE 和 FALSE 的级别

df$Self_Employed <- as.factor(df$Self_Employed)
levels(df$Self_Employed)[levels(df$Self_Employed)=="" ] <- "SE_Missing"

levels(df$Self_Employed)
[1] "FALSE" "TRUE" 

仅显示 True 和 False 的级别和 is.na 显示相同 210

df$Self_Employed <- factor(df$Self_Employed,levels=c('FALSE','TRUE',''),labels=c('Yes','No','SE_Missing'))

如何填补缺失的因素

我需要将 True 转换为“是”,将 False 转换为“否”,将 NA 转换为“SE_Missing”

标签: r

解决方案


我认为您不需要将专栏转换为因素。这是一个使用虚拟数据集的示例

library(dplyr)
df %>%
  mutate(b = case_when(b ~ "Yes", 
                       !b ~ "No", 
                       TRUE ~ "SE_Missing"))

#  a          b
#1 1        Yes
#2 2        Yes
#3 3         No
#4 4 SE_Missing
#5 5         No
#6 6 SE_Missing

ifelse或者使用也可以集成mutate的嵌套

with(df, ifelse(is.na(b), "SE_Missing", ifelse(b, "Yes", "No")))
#[1] "Yes"    "Yes"    "No"    "SE_Missing" "No"    "SE_Missing"

数据

df <- data.frame(a = 1:6, b = c(TRUE, TRUE, FALSE, NA, FALSE, NA))

#  a     b
#1 1  TRUE
#2 2  TRUE
#3 3 FALSE
#4 4    NA
#5 5 FALSE
#6 6    NA

推荐阅读