J'ai un data.frame comme celui-ci -
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
Je voudrais supprimer les lignes en double en fonction des deux premières colonnes. Production attendue -
df[!duplicated(df[,1:2]),]
x y z
1 0 1 1
2 1 0 2
4 1 1 4
Je recherche spécifiquement une solution utilisant dplyr
package.
df %>% group_by(x, y) %>% do(head(.,1))
distinct()
Voici une solution utilisant
dplyr >= 0.5
.la source
Par souci d'exhaustivité, ce qui suit fonctionne également:
Cependant, je préfère utiliser la solution
distinct
et je soupçonne que c'est plus rapide aussi.la source
La plupart du temps, la meilleure solution est d'utiliser
distinct()
de dplyr, comme cela a déjà été suggéré.Cependant, voici une autre approche qui utilise la
slice()
fonction de dplyr.Différence par rapport à l'utilisation du
distinct()
fonctionL'avantage de cette solution est qu'elle rend explicite les lignes qui sont conservées à partir du dataframe d'origine, et elle peut bien s'associer avec la
arrange()
fonction.Supposons que vous disposiez de données sur les ventes des clients et que vous vouliez conserver un enregistrement par client, et que vous souhaitiez que cet enregistrement soit celui de leur dernier achat. Ensuite, vous pourriez écrire:
la source
Lorsque vous sélectionnez des colonnes dans R pour un ensemble de données réduit, vous pouvez souvent vous retrouver avec des doublons.
Ces deux lignes donnent le même résultat. Chacun génère un ensemble de données unique avec deux colonnes sélectionnées uniquement:
la source
Si vous souhaitez rechercher les lignes dupliquées, vous pouvez utiliser à
find_duplicates
partir dehablar
:la source