Eu tenho um data.frame assim -
set.seed(123)
df = data.frame(x=sample(0:1,10,replace=T),y=sample(0:1,10,replace=T),z=1:10)
> df
x y z
1 0 1 1
2 1 0 2
3 0 1 3
4 1 1 4
5 1 0 5
6 0 1 6
7 1 0 7
8 1 0 8
9 1 0 9
10 0 1 10
Gostaria de remover linhas duplicadas com base nas duas primeiras colunas. Produção esperada -
df[!duplicated(df[,1:2]),]
x y z
1 0 1 1
2 1 0 2
4 1 1 4
Estou procurando especificamente uma solução usando o dplyr
pacote.
df %>% group_by(x, y) %>% do(head(.,1))
distinct()
Aqui está uma solução usando
dplyr >= 0.5
.fonte
Por uma questão de integridade, o seguinte também funciona:
No entanto, prefiro usar a solução
distinct
e suspeito que seja mais rápida também.fonte
Na maioria das vezes, a melhor solução é usar o
distinct()
dplyr, como já foi sugerido.No entanto, aqui está outra abordagem que usa a
slice()
função do dplyr.Diferença de usar o
distinct()
funçãoA vantagem dessa solução é que ela torna explícita quais linhas são retidas do dataframe original e pode ser bem pareada com a
arrange()
função.Digamos que você possuísse dados de vendas de clientes e desejasse manter um registro por cliente, e deseja que esse registro seja o da compra mais recente. Então você pode escrever:
fonte
Ao selecionar colunas em R para um conjunto de dados reduzido, muitas vezes você pode acabar com duplicatas.
Essas duas linhas dão o mesmo resultado. Cada um gera um conjunto de dados exclusivo com apenas duas colunas selecionadas:
fonte
Se você quiser encontrar as linhas que são duplicados você pode usar
find_duplicates
a partir dehablar
:fonte