R + PostgreSQL - distinct cheatsheet

Este cheatsheet mostra como filtrar tanto no R quanto no PostgreSQL linhas distintas com base em uma ou mais colunas.

José de Jesus Filho https://rpg.consudata.com.br
01-04-2021
library(dplyr)
set.seed(6723)
df <- data.frame(col1 = sample(letters[1:5],10, replace = TRUE),
                 col2 = sample(letters[1:5],10, replace = TRUE),
                 col3 = sample(letters[1:5],10, replace = TRUE),stringsAsFactors = FALSE)
DBI::dbWriteTable(conn,"df",df)

Apenas colunas selecionadas

Tidyverse

## distinct de uma coluna, 
## retornando uma coluna

df %>% 
    distinct(col1)
      
##  O mesmo para mais de uma coluna  

df %>% 
  distinct(col1,col2)


PostgreSQL

SELECT DISTINCT col1
FROM df;
ou
SELECT col1
FROM df,
GROUP BY col1;

SELECT DISTINCT col1,col2
FROM df;
ou 
SELECT col1,col2
FROM df,
GROUP BY col2,col2;

Inclusão das demais colunas

Tidyverse

## distinct de uma coluna, 
## retornando todas colunas  

df %>% 
  distinct(col1,.keep_all = TRUE)  
  
## Distinct de mais de uma coluna,
## retornando todas colunas  

df %>% 
   distinct(col1,col2,.keep_all =TRUE )


PostgreSQL

SELECT DISTINCT ON (col1) *
FROM df
ORDER BY col1.

Distinct numa coluna, retornando outras colunas.

Tidyverse

df %>% 
  distinct(col1,.keep_all = TRUE) %>% 
  select(col1,col2)


PostgreSQL

SELECT DISTINCT ON (col1) col1,col2
FROM df
ORDER BY col1, col2.