Substitua NA por zero em R
- Substitua NA por zero em frames de dados R maiores
- Substitua NA por zero em um subconjunto do quadro de dados R
Há uma maneira simples de substituir NA
por zeros em um quadro de dados em R. Suponha que você tenha um quadro de dados chamado meus_dados
. Para substituir todos os valores NA
por zeros nesse quadro de dados, você pode executar esta instrução.
my_data[is.na(my_data)] <- 0
Por exemplo, se my_data
tiver o conteúdo abaixo.
C1 C2 C3 C4 C5
1 4 3 <NA> 3 7
2 9 8 ABC 5 10
3 1 1 XYZ 3 6
4 NA 4 <NA> 7 10
5 1 2 ZC1 NA 2
Quando você executa my_data[is.na(my_data)] <- 0
, o conteúdo do quadro de dados muda para este.
C1 C2 C3 C4 C5
1 4 3 0 3 7
2 9 8 ABC 5 10
3 1 1 XYZ 3 6
4 0 4 0 7 10
5 1 2 ZC1 0 2
Substitua NA por zero em frames de dados R maiores
A solução anterior usa as reatribuições do subconjunto Base R, que funcionam bem quando você tem quadros de dados relativamente pequenos. Mas para conjuntos de dados maiores, você pode precisar de uma alternativa mais rápida, como a nova abordagem de avaliação híbrida implementada em versões recentes do pacote dplyr
.
A nova abordagem empregada pelo pacote dplyr
reconhece expressões inteiras e usa código C++ para avaliá-las. Dessa forma, você pode obter transformações até 30% mais rápidas ao processar frames de big data.
Para substituir valores NA
por zeros usando o pacote dplyr
, você pode usar a função mutate
com o verbo com escopo _all
e a função replace
no formato purrr
, como no exemplo abaixo.
my_data <- mutate_all(my_data, ~replace(., is.na(.), 0))
O uso da notação purrr
nos permite aplicar a função replace
a cada elemento do quadro de dados.
Substitua NA por zero em um subconjunto do quadro de dados R
Em vez do verbo com escopo _all
na função mutate
, você pode usar o verbo com escopo _at
para restringir a ação de substituição a colunas específicas. Para fazer isso, você pode incluir um vetor com os nomes das colunas onde deseja que a substituição seja aplicada. Usando o quadro de dados anterior, se você precisar substituir os valores NA
apenas nas colunas C1
e C4
, você pode usar o seguinte comando:
my_data <- mutate_at(my_data, c("C1", "C4"), ~replace(., is.na(.), 0))
Desta forma, apenas os NAs nas colunas C1
e C4
são substituídos por 0, resultando em um quadro de dados como abaixo.
C1 C2 C3 C4 C5
1 4 3 <NA> 3 7
2 9 8 ABC 5 10
3 1 1 XYZ 3 6
4 0 4 <NA> 7 10
5 1 2 ZC1 0 2
No exemplo anterior, você pode querer substituir NA
por zeros apenas em colunas numéricas para evitar a inclusão de valores zero em colunas alfanuméricas, como C3
. Se for esse o caso, em vez de especificar as colunas onde deseja aplicar a substituição, você pode usar a função mutate_if
com a condição is.numeric
para dizer a R para substituir NA
por zeros apenas em colunas numéricas. No exemplo a seguir, você pode encontrar o código completo para fazer isso, desde a instalação do pacote dplyr
e preenchendo o quadro de dados para realizar as substituições e exibir os resultados.
install.packages("dplyr")
library(dplyr)
C1 <- c(4, 9, 1, NA, 1)
C2 <- c(3, 8, 1, 4, 2)
C3 <- c(NA, 'ABC', 'XYZ', NA, 'ZC1')
C4 <- c(3, 5, 3, 7, NA)
C5 <- c(7, 10, NA, 10, 2)
my_data <- data.frame(C1, C2, C3, C4, C5)
my_data <- mutate_if(my_data, is.numeric, ~replace(., is.na(.), 0))
my_data
Resultado:
C1 C2 C3 C4 C5
1 4 3 <NA> 3 7
2 9 8 ABC 5 10
3 1 1 XYZ 3 0
4 0 4 <NA> 7 10
5 1 2 ZC1 0 2
Você pode encontrar mais informações sobre a função mutate()
e suas variantes na Documentação R.