Como substituir valores ausentes (NA) em R: na.omit & na.rm

Índice:

Anonim

Os valores ausentes na ciência de dados surgem quando uma observação está ausente em uma coluna de um quadro de dados ou contém um valor de caractere em vez de um valor numérico. Os valores ausentes devem ser eliminados ou substituídos para tirar a conclusão correta dos dados.

Neste tutorial, aprenderemos como lidar com valores ausentes com a biblioteca dplyr. A biblioteca dplyr é parte de um ecossistema para realizar uma análise de dados.

Neste tutorial, você aprenderá

  • mutate ()
  • Excluir valores ausentes (NA)
  • Imputar valores ausentes (NA) com a média e a mediana

mutate ()

O quarto verbo na biblioteca dplyr é útil para criar uma nova variável ou alterar os valores de uma variável existente.

Vamos proceder em duas partes. Vamos aprender como:

  • excluir valores ausentes de um quadro de dados
  • imputar valores ausentes com a média e mediana

O verbo mutate () é muito fácil de usar. Podemos criar uma nova variável seguindo esta sintaxe:

mutate(df, name_variable_1 = condition,… )arguments:-df: Data frame used to create a new variable-name_variable_1: Name and the formula to create the new variable-… : No limit constraint. Possibility to create more than one variable inside mutate()

Excluir valores ausentes (NA)

O método na.omit () da biblioteca dplyr é uma maneira simples de excluir observações perdidas. Eliminar todo o NA dos dados é fácil, mas não significa que seja a solução mais elegante. Durante a análise, é aconselhável usar vários métodos para lidar com os valores ausentes

Para resolver o problema de observações ausentes, usaremos o conjunto de dados titânico. Neste conjunto de dados, temos acesso às informações dos passageiros a bordo durante a tragédia. Este conjunto de dados contém muitos NA que precisam ser cuidados.

Faremos o upload do arquivo csv da Internet e, em seguida, verificaremos quais colunas possuem NA. Para retornar as colunas com dados ausentes, podemos usar o seguinte código:

Vamos fazer o upload dos dados e verificar os dados ausentes.

PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/test.csv"df_titanic <- read.csv(PATH, sep = ",")# Return the column names containing missing observationslist_na <- colnames(df_titanic)[ apply(df_titanic, 2, anyNA) ]list_na

Resultado:

## [1] "age" "fare"

Aqui,

colnames(df_titanic)[apply(df_titanic, 2, anyNA)]

Dá o nome de colunas que não possuem dados.

As colunas idade e tarifa têm valores ausentes.

Podemos eliminá-los com o na.omit ().

library(dplyr)# Exclude the missing observationsdf_titanic_drop <-df_titanic %>%na.omit()dim(df_titanic_drop)

Resultado:

## [1] 1045 13

O novo conjunto de dados contém 1.045 linhas em comparação com 1309 com o conjunto de dados original.

Imputar dados ausentes com a média e a mediana

Também poderíamos imputar (preencher) valores ausentes com a mediana ou a média. Uma boa prática é criar duas variáveis ​​separadas para a média e a mediana. Depois de criados, podemos substituir os valores ausentes pelas variáveis ​​recém-formadas.

Usaremos o método apply para calcular a média da coluna com NA. Vamos ver um exemplo

Etapa 1) Anteriormente no tutorial, armazenamos o nome das colunas com os valores ausentes na lista chamada list_na. Vamos usar esta lista

Etapa 2) Agora precisamos calcular a média com o argumento na.rm = TRUE. Este argumento é obrigatório porque as colunas têm dados ausentes e isso diz a R para ignorá-los.

# Create meanaverage_missing <- apply(df_titanic[,colnames(df_titanic) %in% list_na],2,mean,na.rm = TRUE)average_missing

Explicação do código:

Passamos 4 argumentos no método apply.

  • df: df_titanic [, colnames (df_titanic)% em% list_na]. Este código retornará o nome das colunas do objeto list_na (ou seja, "idade" e "tarifa")
  • 2: Calcule a função nas colunas
  • mean: Calcule a média
  • na.rm = TRUE: ignorar os valores ausentes

Resultado:

## age fare## 29.88113 33.29548

Criamos com sucesso a média das colunas contendo observações ausentes. Esses dois valores serão usados ​​para substituir as observações ausentes.

Etapa 3) Substituir os valores NA

O verbo mutate da biblioteca dplyr é útil na criação de uma nova variável. Não queremos necessariamente alterar a coluna original para que possamos criar uma nova variável sem o NA. mutate é fácil de usar, basta escolher o nome de uma variável e definir como criar esta variável. Aqui está o código completo

# Create a new variable with the mean and mediandf_titanic_replace <- df_titanic %>%mutate(replace_mean_age = ifelse(is.na(age), average_missing[1], age),replace_mean_fare = ifelse(is.na(fare), average_missing[2], fare))

Explicação do código:

Criamos duas variáveis, replace_mean_age e replace_mean_fare da seguinte maneira:

  • substituir_média_age = ifelse (is.na (idade), média ausente [1], idade)
  • replace_mean_fare = ifelse (is.na (fare), average_missing [2], fare)

Se a coluna idade tiver valores ausentes, substitua pelo primeiro elemento de average_missing (média de idade), caso contrário, mantenha os valores originais. Mesma lógica para tarifa

sum(is.na(df_titanic_replace$age))

Resultado:

## [1] 263

Realize a substituição

sum(is.na(df_titanic_replace$replace_mean_age))

Resultado:

## [1] 0 

A idade da coluna original tem 263 valores ausentes, enquanto a variável recém-criada os substituiu pela média da variável idade.

Etapa 4) Podemos substituir as observações ausentes pela mediana também.

median_missing <- apply(df_titanic[,colnames(df_titanic) %in% list_na],2,median,na.rm = TRUE)df_titanic_replace <- df_titanic %>%mutate(replace_median_age = ifelse(is.na(age), median_missing[1], age),replace_median_fare = ifelse(is.na(fare), median_missing[2], fare))head(df_titanic_replace)

Resultado:

Etapa 5) Um conjunto de big data pode ter muitos valores ausentes e o método acima pode ser complicado. Podemos executar todas as etapas acima em uma linha de código usando o método sapply (). Embora não saibamos os valores de média e mediana.

sapply não cria um quadro de dados, portanto, podemos envolver a função sapply () em data.frame () para criar um objeto de quadro de dados.

# Quick code to replace missing values with the meandf_titanic_impute_mean < -data.frame(sapply(df_titanic,function(x) ifelse(is.na(x),mean(x, na.rm = TRUE),x)))

Resumo

Temos três métodos para lidar com valores ausentes:

  • Exclua todas as observações ausentes
  • Imputar com a média
  • Imputar com a mediana

A tabela a seguir resume como remover todas as observações ausentes

Biblioteca Objetivo Código
base Listar observações ausentes
colnames(df)[apply(df, 2, anyNA)]
dplyr Remova todos os valores ausentes
na.omit(df)

A imputação com média ou mediana pode ser feita de duas maneiras

  • Usando aplicar
  • Usando sapply
Método Detalhes Vantagens Desvantagens
Passo a passo com a aplicação Verifique as colunas ausentes, calcule a média / mediana, armazene o valor, substitua por mutate () Você sabe o valor da média / mediana Mais tempo de execução. Pode ser lento com grande conjunto de dados
Maneira rápida com sapply Use sapply () e data.frame () para pesquisar e substituir automaticamente os valores ausentes por média / mediana Código curto e rápido Não sei os valores de imputação