7.9 Encontrando e removendo dados duplicados

Dados frequentemente pode ter valores duplicados ou repetidos e dependendo da aplicação isso pode causar problemas nos resultados.

O R oferece algumas funções convenientes para detectar dados duplicados.

Vamos criar um vetor de datas que contenham datas repetidas:

datas <- seq(
  from = as.Date("2017-01-10"),
  to = as.Date("2017-01-10") + 10,
  by = "day"
)
datas <- c(
  datas[1:6], NA, 
  datas[7:length(datas)], 
  datas[length(datas)], 
  datas[5:6]
)
datas
#>  [1] "2017-01-10" "2017-01-11" "2017-01-12" "2017-01-13" "2017-01-14"
#>  [6] "2017-01-15" NA           "2017-01-16" "2017-01-17" "2017-01-18"
#> [11] "2017-01-19" "2017-01-20" "2017-01-20" "2017-01-14" "2017-01-15"

A dunção duplicated() serve detectar onde ocorrem valores repetidos.

duplicated(datas)
#>  [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
#> [13]  TRUE  TRUE  TRUE

Ela retorna um vetor lógico mostrando quais elementos são duplicados. Neste exemplo os últimos 3 elementos. Este resultado pode ser usado para remover os valores repetidos:

# datas únicas: sem valores duplicados
datas[!duplicated(datas)]
#>  [1] "2017-01-10" "2017-01-11" "2017-01-12" "2017-01-13" "2017-01-14"
#>  [6] "2017-01-15" NA           "2017-01-16" "2017-01-17" "2017-01-18"
#> [11] "2017-01-19" "2017-01-20"

Alternativamente, há função unique() para remover valores repetidos de um vetor:

unique(datas)
#>  [1] "2017-01-10" "2017-01-11" "2017-01-12" "2017-01-13" "2017-01-14"
#>  [6] "2017-01-15" NA           "2017-01-16" "2017-01-17" "2017-01-18"
#> [11] "2017-01-19" "2017-01-20"