Pular para o conteúdo principal

Como usar o na.rm para lidar com valores ausentes no R

Definimos na.rm = TRUE em funções comuns do R para excluir valores ausentes (NA). Isso nos ajuda a computar estatísticas precisas e aumenta a confiabilidade dos nossos resultados.
Actualizado 30 de jul. de 2024  · 8 min de leitura

Os dados estão sendo gerados e consumidos em um ritmo industrial para orientar as principais decisões de negócios. No entanto, um desafio comum na análise de dados é a presença de valores ausentes. Isso pode distorcer os resultados, tornando inevitável para qualquer analista de dados lidar com eles de forma eficaz. No R, uma das ferramentas fundamentais para gerenciar valores ausentes é o parâmetro na.rm.

Esta publicação explica a importância de lidar com dados ausentes, como funciona o na.rm no R, demonstra seu uso em várias funções e conclui com a discussão de algumas técnicas alternativas para identificar e lidar com dados ausentes.

A resposta curta: O que é na.rm?

O parâmetro na.rm no R significa "NA remove" e ignora os valores NA (ausentes) durante os cálculos. Ao definir na.rm = TRUE, funções como mean(), sum(), min(), max(), median() e sd() calculam os resultados sem serem afetadas por valores ausentes.

O parâmetro na.rm, escrito em letras minúsculas, inclui um valor booleano:TRUE ou FALSE. Quando definimos na.rm = TRUE, o R exclui os valores de NA dos cálculos. Sem esse parâmetro, as funções retornariam NA se houvesse valores ausentes nos dados. Dê uma olhada.

vector_with_na <- c(1, 2, NA)

sum(vector_with_na, na.rm = TRUE) # removes NA values — returns 3
sum(vector_with_na) # includes NA values — returns NA
sum(vector_with_na, na.rm = FALSE) # includes NA values — returns NA

Confira o curso Introdução ao R para saber mais sobre a programação básica do R.

Por que usar a na.rm?

O tratamento de valores ausentes é crucial na análise de dados para garantir resultados precisos, pois eles podem afetar significativamente os cálculos estatísticos, levando inadvertidamente a conclusões incorretas. O uso do site na.rm torna conveniente evitar erros ignorando esses valores ausentes, realizando assim cálculos confiáveis e mantendo a integridade dos dados.

O curso Data Cleaning in R (Limpeza de dados em R ) é valioso para aprimorar nossas habilidades de análise de dados.

Funções comuns usando na.rm: Alguns exemplos práticos

Agora, vamos entender como você pode usar o na.rm no R. Várias funções do R incorporam o parâmetro na.rm (definido como FALSE por padrão). Aqui estão alguns exemplos comuns:

sum()

Como o nome sugere, o sum() calcula o total de valores em um vetor. Vamos criar um vetor chamado vector_with_na, que usaremos ao longo deste tutorial.

vector_with_na <- c(1, 2, NA, 4)

sum(vector_with_na) 
# Returns NA

sum(vector_with_na, na.rm = TRUE) 
# Returns 7

mean()

Usando o mesmo exemplo, a função mean() calcula a média, ou seja, a média dos valores em nosso vetor.

mean(vector_with_na) 
# Returns NA

mean(vector_with_na, na.rm = TRUE) 
# Returns 2.33

sd()

Continuando com vector_with_na, o sd() calcula o desvio padrão do vetor.

sd(vector_with_na) 
# Returns NA

sd(vector_with_na, na.rm = TRUE) 
# Returns 1.53

min()

O site min() encontra o valor mínimo.

min(vector_with_na) 
# Returns NA

min(vector_with_na, na.rm = TRUE) 
# Returns 1

max()

max() encontra o valor máximo.

max(vector_with_na) 
# Returns NA

max(vector_with_na, na.rm = TRUE) 
# Returns 4

median()

median() encontra o valor intermediário quando organizado em ordem.

median(vector_with_na) 
# Returns NA

median(vector_with_na, na.rm = TRUE) 
# Returns 2

Observe que, na ausência de na.rm = TRUE, todas essas funções agregadas retornam NA.

Ao definir na.rm = TRUE, essas funções excluem os valores de NA, o que resulta em cálculos precisos e significativos. O programa de habilidades R Programming Fundamentals pode ser um bom recurso para você entender melhor o uso e a sintaxe dessas funções.

Manipulação de valores ausentes em diferentes estruturas de dados

Vamos dar uma olhada em como lidar com valores ausentes em diferentes estruturas de dados. Antes de continuarmos, confira nosso artigo Como dominar as estruturas de dados na linguagem de programação R se você quiser saber mais sobre as estruturas de dados do R. 

Vetores

Em vetores, o na.rm pode ser usado diretamente nas funções para excluir valores ausentes. Os exemplos compartilhados na seção anterior são todos exemplos de na.rm em ação em vetores.

Quadros de dados

Para quadros de dados, o na.rm pode ser aplicado dentro de funções usadas em colunas específicas ou em linhas usando o apply(), conforme mostrado abaixo:

apply(X, MARGIN, FUN)

Aqui:

  • X: uma matriz, quadro de dados ou matriz

  • MARGINArgumento para identificar onde aplicar a função:

    • MARGIN=1 para manipulação de linhas

    • MARGIN=2 para manipulação de colunas

    • MARGIN=c(1,2) para manipulação de linhas e colunas

  • FUN: informa qual função você deve aplicar. Você pode aplicar funções integradas, como mean(), median(), sum(), min(), max(), e funções definidas pelo usuário.

Vamos criar um quadro de dados para nossa referência ao longo deste tutorial.

dataframe_with_na <- data.frame(col1 = c(1, NA, 3, 6), col2 = c(4, 5, NA, 7))

print(dataframe_with_na)
# Returns
#   col1 col2
# 1    1    4
# 2   NA    5
# 3    3   NA
# 4    6    7

apply(dataframe_with_na, 1, mean)
# Returns
# [1] 2.5  NA  NA 6.5

apply(dataframe_with_na, 1, mean, na.rm = TRUE)
# Returns
# [1] 2.5 5.0 3.0 6.5

apply(dataframe_with_na, 2, mean)
# Returns
# col1 col2 
#  NA   NA 

apply(dataframe_with_na, 2, mean, na.rm = TRUE)
# Returns   
#   col1     col2 
# 3.333333 5.333333

Listas

A função lapply() no R é usada para aplicar uma função especificada a cada elemento de uma lista, vetor ou quadro de dados e retorna uma lista com o mesmo comprimento. Essa função não requer um parâmetro MARGIN, pois aplica automaticamente a operação a todos os elementos.

Syntax:

lapply(vector_with_na, fun)

Aqui:

  • vector_with_na: A lista, o vetor ou o quadro de dados de entrada.
  • fun: A função a ser aplicada a cada elemento de dados de entrada.

Vamos entender lapply() usando um exemplo de lista. Aqui temos uma lista de coleções (item_1 e item_2) com elementos semelhantes ao quadro de dados (dataframe_with_na). Nosso objetivo é encontrar a média de cada coleção.

list_with_na <- list(item_1=c(1, NA, 3, 6), item_2=c(4, 5, NA, 7))

lapply(list_with_na, mean)
# Returns
# $item_1
# [1] NA
# 
# $item_2
# [1] NA

lapply(list_with_na, mean, na.rm =TRUE)
# Returns
# $item_1
# [1] 3.333333
# 
# $item_2
# [1] 5.333333

A função sapply() é semelhante à lapply(), mas retorna um array ou matriz em vez de uma lista. Vamos usar a lista (list_with_na) e o sapply() para calcular a média dos valores de cada coleção dentro dela.

sapply(list_with_na, mean)
# Returns
# a  b 
# NA NA 

sapply(list_with_na, mean, na.rm = TRUE)

# Returns
# a        b 
# 3.333333 5.333333

Agora, vamos usar o quadro de dados (dataframe_with_na) e o sapply() para calcular a soma dos valores de cada coluna.

sapply(dataframe_with_na, sum)

# Returns
# col1 col2 
# NA   NA 

sapply(dataframe_with_na, sum, na.rm=TRUE)
# Returns
# col1 col2 
# 10   16

Para que você tenha uma compreensão mais ampla da manipulação de dados em R, o curso Manipulação de dados com dplyr é altamente recomendado. Se você se sentir inseguro em relação à família de funções apply() especificamente, leia nosso tutorial sobre a família Apply do R.

Comparação com na.omit() e complete.cases()

na.omit(): Essa função remove todas as linhas que contêm valores NA em um quadro de dados. Vamos entender isso com um exemplo:

na.omit(dataframe_with_na)
# Returns
# col1 col2
# 1    1    4
# 4    6    7

complete.cases(): Por outro lado, complete.cases() identifica as linhas sem nenhum valor NA e retorna um bool correspondente a cada linha (FALSE para linhas com NA e vice-versa). Isso pode ser usado para filtrar os valores que não estão faltando no quadro de dados, conforme mostrado abaixo.

complete.cases(dataframe_with_na)
# Returns
# [1]  TRUE FALSE FALSE  TRUE

dataframe_with_na[complete.cases(dataframe_with_na), ]
# Returns
# col1 col2
# 1    1    4
# 4    6    7

Técnicas avançadas para lidar com valores ausentes

Além do na.rm, o R oferece métodos avançados para lidar com dados ausentes:

Usando is.na() para identificar valores ausentes

is.na() pode ser aplicado diretamente em um vetor ou quadro de dados para identificar dados ausentes. Ele retorna um TRUE correspondente a cada valor ausente.

is.na(vector_with_na)
# Returns
# [1] FALSE FALSE  TRUE FALSE

is.na(dataframe_with_na)
# Returns
# col1  col2
# [1,] FALSE FALSE
# [2,]  TRUE FALSE
# [3,] FALSE  TRUE
# [4,] FALSE FALSE

Aplicação de métodos de imputação

A imputação substitui os valores ausentes por valores estimados, como a média ou a mediana, conforme mostrado abaixo:

vector_with_na[is.na(vector_with_na)] <- mean(vector_with_na, na.rm = TRUE)

print(vector_with_na)
# Returns
# [1] 1.000000 2.000000 2.333333 4.000000

dataframe_with_na[is.na(dataframe_with_na)] <- sapply(dataframe_with_na, mean, na.rm=TRUE)
print(dataframe_with_na)
# Returns
# col1     col2
# 1 1.000000 4.000000
# 2 3.333333 5.000000
# 3 3.000000 5.333333
# 4 6.000000 7.000000

Usando a função summary()

É interessante notar que a funçãosummary() é diferente de usar na.rm para lidar com valores ausentes. Por padrão, o site summary() exclui automaticamente os valores ausentes ao calcular as estatísticas resumidas e, posteriormente, informa o número de NAs presentes nos dados.

Vamos executar summary() no vetor vector_with_na:

summary(vector_with_na)
#Returns
#   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
#  1.000   1.500   2.000   2.333   3.000   4.000       1

E no quadro de dados dataframe_with_na:

summary(dataframe_with_na)
# Returns
# col1           col2     
# Min.   :1.00   Min.   :4.00  
# 1st Qu.:2.50   1st Qu.:4.75  
# Median :3.00   Median :5.00  
# Mean   :3.25   Mean   :5.25  
# 3rd Qu.:3.75   3rd Qu.:5.50  
# Max.   :6.00   Max.   :7.00 

O curso Intermediate R oferece insights aprofundados para os interessados em técnicas mais avançadas de manipulação de dados.

Práticas recomendadas para lidar com valores ausentes

O tratamento eficaz de valores ausentes envolve várias práticas recomendadas:

Sempre verifique se há valores ausentes

Identificar e compreender a extensão dos dados ausentes antes de realizar os cálculos. O exemplo abaixo mostra que o quadro de dados tem um total de 2 valores ausentes.

print(dataframe_with_na)
# Returns
# col1 col2
# 1    1    4
# 2   NA    5
# 3    3   NA
# 4    6    7

sum(is.na(dataframe_with_na))
# Returns
# [1] 2

Use verificações condicionais

Sempre verifique a presença de dados ausentes e aplique adequadamente as técnicas de imputação, garantindo que todos os casos extremos sejam bem tratados.

if(any(is.na(dataframe_with_na))) {  
  if (class(dataframe_with_na) == "data.frame") {    
   dataframe_with_na[is.na(dataframe_with_na)] <- sapply(dataframe_with_na, median, na.rm=TRUE)      
  }
}

print(dataframe_with_na)
# Returns
# col1 col2
# 1    1    4
# 2    3    5
# 3    3    5
# 4    6    7

Considere o contexto

Entenda por que os dados estão faltando e escolha um método apropriado para lidar com eles: remoção ou imputação.

Para uma abordagem estruturada da análise de dados e do manuseio de valores ausentes, o Limpeza de dados em R pode ser um ótimo recurso.

Conclusão

Entender e usar o site na.rm é fundamental para garantir uma análise de dados confiável e precisa. Pratique o uso do na.rm em projetos do R e explore técnicas avançadas para lidar com dados ausentes de forma abrangente.

Para aprender mais, explore estes recursos adicionais:

Perguntas frequentes

O que é o parâmetro na.rm no R?

O parâmetro na.rm no R significa "NA remove". Quando definido como TRUE, instrui as funções a ignorar os valores NA (ausentes) durante os cálculos, garantindo resultados precisos.

Como você usa o na.rm em funções comuns do R?

Você pode usar na.rm em funções como sum(), mean(), sd(), min(), max() e median() definindo na.rm = TRUE para excluir valores ausentes dos cálculos.

Por que é importante lidar com valores ausentes na análise de dados?

Os valores ausentes podem distorcer os resultados e levar a conclusões imprecisas. O manuseio eficaz dessas informações garante cálculos confiáveis e mantém a integridade dos dados.

O na.rm pode ser usado com quadros de dados e listas no R?

Sim, o na.rm pode ser usado com estruturas de dados usando funções como apply() e com listas usando lapply() e sapply() para excluir valores ausentes durante as operações nessas estruturas de dados.

Quais são algumas técnicas avançadas para lidar com valores ausentes no R?

Além de na.rm, as técnicas avançadas incluem o uso de is.na() para identificar valores ausentes, aplicar métodos de imputação para substituí-los e aproveitar funções como na.omit() e complete.cases() para limpeza de dados mais complexa.

Temas

Aprenda R com a DataCamp

curso

Introduction to R

4 hr
2.7M
Master the basics of data analysis in R, including vectors, lists, and data frames, and practice R with real data sets.
Ver DetalhesRight Arrow
Iniciar Curso
Ver maisRight Arrow
Relacionado

tutorial

Principais técnicas para lidar com valores ausentes que todo cientista de dados deve conhecer

Explore várias técnicas para lidar eficientemente com valores ausentes e suas implementações em Python.
Zoumana Keita 's photo

Zoumana Keita

15 min

tutorial

Classificação de K-Nearest Neighbors (KNN) com o tutorial do R

Aprenda a usar os pacotes R 'class' e 'caret', ajustar hiperparâmetros e avaliar o desempenho do modelo.
Abid Ali Awan's photo

Abid Ali Awan

11 min

tutorial

Tutorial de Pipes em R para iniciantes

Saiba mais sobre o famoso operador de pipe %>% e outros pipes no R, por que e como você deve usá-los e quais alternativas você pode considerar!
Karlijn Willems's photo

Karlijn Willems

25 min

tutorial

Criação de uma lista no R

Pratique Listas em R usando o material do curso Intro to R do DataCamp.
Ryan Sheehy's photo

Ryan Sheehy

3 min

tutorial

Um guia para expressões regulares do R

Explore as expressões regulares no R, por que elas são importantes, as ferramentas e funções para trabalhar com elas, os padrões comuns de regex e como usá-las.
Elena Kosourova's photo

Elena Kosourova

16 min

tutorial

Leitura e importação de arquivos do Excel para o R com o readxl

Neste artigo, saiba como importar arquivos do Excel para o R com a biblioteca readxl.
Vidhi Chugh's photo

Vidhi Chugh

31 min

See MoreSee More