Trouver TOUTES les lignes en double, y compris les “éléments avec de petits indices”
R duplicated
retourne un vecteur indiquant si chaque élément d'un vecteur ou d'une trame de données est une copie d'un élément avec un plus petit indice. Donc, si les lignes 3, 4, et 5 de 5 ligne de bloc de données sont les mêmes, duplicated
va me donner le vecteur
FALSE, FALSE, FALSE, TRUE, TRUE
Mais dans ce cas je veux obtenir
FALSE, FALSE, TRUE, TRUE, TRUE
qui est, je veux savoir si une ligne est reproduit par une ligne avec un plus indice trop.
Vous devez vous connecter pour publier un commentaire.
duplicated
a unfromLast
argument. La section "Exemple" de?duplicated
vous montre comment l'utiliser. Appelez simplementduplicated
deux fois, une fois avecfromLast=FALSE
et une fois avecfromLast=TRUE
et de prendre les lignes où sontTRUE
.La fin de certaines Edit:
Vous n'avez pas fourni un exemple reproductible, donc voici une illustration aimablement contribué par @jbaums
x <- c(1:9, 7:10, 5:22); y <- c(letters, letters[1:5]); test <- data.frame(x, y); test[duplicated(test$x) | duplicated(test$x, fromLast=TRUE), ]
Retourné tous les trois-il des copies de 7, 8 et 9. Pourquoi est-ce que le travail?duplicated(c(1,1,1))
vsduplicated(c(1,1,1,), fromLast = TRUE)
donnec(FALSE,TRUE,TRUE)
etc(TRUE,TRUE,FALSE)
. Valeur moyenneTRUE
dans les deux cas. La prise de|
de deux vecteurs donnec(TRUE,TRUE,TRUE)
.Vous devez assembler l'ensemble de
duplicated
valeurs, appliquerunique
, puis de tester avec%in%
. Comme toujours, un exemple de problème pour rendre plus vivant.%in%
ne fonctionne pas avec dataframesduplicated
,unique
et%in%
pourrait être facilement généralisée à un dataframe si l'on devait d'abordpaste
chaque ligne avec un singulier caractère de séparation. (Accepté la réponse est mieux).J'ai eu le même question, et si je ne me trompe pas, c'est aussi une réponse.
Ne sais pas lequel est le plus rapide, cependant, le jeu de données que j'utilise actuellement n'est pas assez grand pour faire des tests qui produisent d'importants écarts.
vec
les deux atomique vecteur et comme un dataframe. Je soupçonne qu'une réelle datframe il serait un échec.Si vous êtes intéressé dans laquelle les lignes sont répétées pour certaines colonnes, vous pouvez utiliser un plyr approche:
L'ajout d'un nombre variable avec dplyr:
Pour les lignes en double (en tenant compte de toutes les colonnes):
L'avantage de ces approches est que vous pouvez spécifier le nombre de doublons comme une coupure.
Les lignes en double dans un dataframe pourrait être obtenu avec
dplyr
en faisantÀ exclure certaines colonnes
group_by_at(vars(-var1, -var2))
pourrait être utilisé pour regrouper les données.Si les indices de ligne et pas seulement les données nécessaires, vous pouvez les ajouter en premier comme dans: