Rimuovi righe duplicate per colonna in R

Jinku Hu 14 luglio 2021
  1. Utilizzare la funzione distinct del pacchetto dplyr per rimuovere righe duplicate per colonna in R
  2. Utilizzare le funzioni group_by, filter e duplicated per rimuovere righe duplicate per colonna in R
  3. Usa le funzioni group_by e slice per rimuovere righe duplicate per colonna in R
Rimuovi righe duplicate per colonna in R

Questo articolo introdurrà come rimuovere le righe duplicate per colonna in R.

Utilizzare la funzione distinct del pacchetto dplyr per rimuovere righe duplicate per colonna in R

Il pacchetto dplyr fornisce la funzione distinct, una delle librerie di manipolazione dei dati più comuni utilizzate nel linguaggio R. distinct seleziona righe univoche nel data frame. Prende il frame di dati come primo argomento e poi le variabili che devono essere considerate durante la selezione. È possibile fornire più variabili di colonna per filtrare le righe univoche, ma nel seguente frammento di codice dimostriamo gli esempi di singole variabili. Il terzo argomento è facoltativo e ha il valore predefinito - FALSE, ma se l’utente passa esplicitamente TRUE, la funzione manterrà tutte le variabili nel frame di dati dopo il filtraggio. Si noti che dplyr utilizza una funzione operatore chiamata pipe of form - %>%, che viene interpretata come la fornitura della variabile sinistra come primo argomento della funzione destra. Vale a dire, la notazione x %?% f(y) ​​diventa 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)

Utilizzare le funzioni group_by, filter e duplicated per rimuovere righe duplicate per colonna in R

Un’altra soluzione per rimuovere le righe duplicate dai valori di colonna è raggruppare il frame di dati con la variabile di colonna e quindi filtrare gli elementi utilizzando le funzioni filter e duplicated. Il primo passo è fatto con la funzione group_by che fa parte del pacchetto dplyr. Successivamente, l’output dell’operazione precedente viene reindirizzato alla funzione filter per eliminare le righe duplicate.

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))

Usa le funzioni group_by e slice per rimuovere righe duplicate per colonna in R

In alternativa, è possibile utilizzare la funzione group_by insieme a slice per rimuovere righe duplicate per valori di colonna. Anche slice fa parte del pacchetto dplyr e seleziona le righe per indice. È interessante notare che quando il frame di dati è raggruppato, allora slice selezionerà le righe sull’indice dato in ciascun gruppo, come dimostrato nel seguente codice di esempio.

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)
Autore: 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

Articolo correlato - R Data Frame