Curso
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 -
MARGIN
Argumento 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, comomean()
,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:
: A lista, o vetor ou o quadro de dados de entrada.vector_with_na
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 NA
s 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:
- Limpeza de dados: Aprimore suas habilidades de análise de dados com nosso curso Limpeza de dados em R.
- Introdução ao R: Você pode começar a programar em R com o nosso curso Introduction to R.
- Visualização de dados: Domine a criação de visuais atraentes com nosso curso Introduction to Data Visualization with ggplot2.
- Manipulação de dados: Aprimore suas técnicas de transformação de dados com nosso curso Data Manipulation with dplyr.
- Análise de regressão: Mergulhe nas técnicas de regressão e aprenda estatística com nosso curso Introduction to Regression in R.
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.