Remova linhas duplicadas por coluna em R

Jinku Hu 30 janeiro 2023
  1. Use a função distinct do pacote dplyr para remover linhas duplicadas por coluna em R
  2. Use as funções group_by, filter e duplicated para remover linhas duplicadas por coluna em R
  3. Use as funções group_by e slice para remover linhas duplicadas por coluna em R
Remova linhas duplicadas por coluna em R

Este artigo irá apresentar como remover linhas duplicadas por coluna em R.

Use a função distinct do pacote dplyr para remover linhas duplicadas por coluna em R

O pacote dplyr fornece a função distinct, uma das bibliotecas de manipulação de dados mais comuns usadas na linguagem R. distinct seleciona linhas exclusivas no quadro de dados fornecido. Leva o quadro de dados como o primeiro argumento e, em seguida, as variáveis ​​que precisam ser consideradas durante a seleção. Várias variáveis ​​de coluna podem ser fornecidas para filtrar as linhas exclusivas, mas no trecho de código a seguir, demonstramos os exemplos de variável única. O terceiro argumento é opcional e tem o valor padrão - FALSE, mas se o usuário passar explicitamente TRUE, a função manterá todas as variáveis ​​no quadro de dados após a filtragem. Observe que dplyr usa uma função de operador chamada tubos de forma - %>%, que é interpretado como fornecendo a variável esquerda como o primeiro argumento da função direita. A saber, a notação x %?% f(y) torna-se f(x, y).

library(dplyr)

df1 <- data.frame(id = c(1, 2, 2, 3, 3, 4, 5, 5),
                 gender = c("F", "F", "M", "F", "B", "B", "F", "M"),
                 variant = c("a", "b", "c", "d", "e", "f", "g", "h"))

t1 <- df1 %>% distinct(id, .keep_all = TRUE)
t2 <- df1 %>% distinct(gender, .keep_all = TRUE)
t3 <- df1 %>% distinct(variant, .keep_all = TRUE)

df2 <- mtcars

tmp1 <- df2 %>% distinct(cyl, .keep_all = TRUE)
tmp2 <- df2 %>% distinct(mpg, .keep_all = TRUE)

Use as funções group_by, filter e duplicated para remover linhas duplicadas por coluna em R

Outra solução para remover linhas duplicadas por valores de coluna é agrupar o quadro de dados com a variável da coluna e, em seguida, filtrar os elementos usando as funções filter e duplicated. O primeiro passo é feito com a função group_by que faz parte do pacote dplyr. Em seguida, a saída da operação anterior é redirecionada para a função filter para eliminar linhas duplicadas.

library(dplyr)

df1 <- data.frame(id = c(1, 2, 2, 3, 3, 4, 5, 5),
                 gender = c("F", "F", "M", "F", "B", "B", "F", "M"),
                 variant = c("a", "b", "c", "d", "e", "f", "g", "h"))

t1 <- df1 %>% group_by(id) %>% filter (! duplicated(id))
t2 <- df1 %>% group_by(gender) %>% filter (! duplicated(gender))
t3 <- df1 %>% group_by(variant) %>% filter (! duplicated(variant))

df2 <- mtcars

tmp3 <- df2 %>% group_by(cyl) %>% filter (! duplicated(cyl))
tmp4 <- df2 %>% group_by(mpg) %>% filter (! duplicated(mpg))

Use as funções group_by e slice para remover linhas duplicadas por coluna em R

Alternativamente, pode-se utilizar a função group_by junto com slice para remover linhas duplicadas por valores de coluna. slice também faz parte do pacote dplyr e seleciona linhas por índice. Curiosamente, quando o quadro de dados é agrupado, então slice seleciona as linhas no índice fornecido em cada grupo, conforme demonstrado no código de amostra a seguir.

library(dplyr)

df1 <- data.frame(id = c(1, 2, 2, 3, 3, 4, 5, 5),
                 gender = c("F", "F", "M", "F", "B", "B", "F", "M"),
                 variant = c("a", "b", "c", "d", "e", "f", "g", "h"))

t1 <- df1 %>% group_by(id) %>% slice(1)
t2 <- df1 %>% group_by(gender) %>% slice(1)
t3 <- df1 %>% group_by(variant) %>% slice(1)

df2 <- mtcars

tmp5 <- df2 %>% group_by(cyl) %>% slice(1)
tmp6 <- df2 %>% group_by(mpg) %>% slice(1)
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artigo relacionado - R Data Frame