2015-08-15 1 views
-1

Je veux supprimer les lignes avec IDs dupliquéssupprimer les lignes avec IDs dupliqués

données

id V1 V2 
1  a  1 
1  b  2 
2  a  2 
2  c  3 
3  a  4 

Le problème est que certaines personnes ont fait le test pour quelques temps, qui génèrent des scores multiples sur V2 , Je veux supprimer l'ID dupliqué et conserver l'un des scores dans V2 au hasard.

sortie

id V1 V2 
1  a  1 
2  a  2 
3  a  4 

J'ai essayé ceci:

neu <- unique(neu$userid) 

mais ça n'a pas

+1

'df [! Dupliqués (df $ id),]'? – r2evans

+0

déjà essayé, Erreur dans df [! Duplicated (neu $ userid),]: objet de type 'closure' n'est pas sous-mémorisable – Lucia

+2

Essayez 'df [! Duplicated (df $ userid),]' – Whitebeard

Répondre

1

En utilisant dplyr:

library(dplyr) 
set.seed(1) 
df %>% sample_frac(., 1) %>% arrange(id) %>% distinct(id) 

Sortie:

id V1 V2 
1 1 b 2 
2 2 c 3 
3 3 a 4 

données:

df <- structure(list(id = c(1L, 1L, 2L, 2L, 3L), V1 = structure(c(1L, 
2L, 1L, 3L, 1L), .Label = c("a", "b", "c"), class = "factor"), 
    V2 = c(1L, 2L, 2L, 3L, 4L)), .Names = c("id", "V1", "V2"), class = "data.frame", row.names = c(NA, 
-5L)) 
+0

Cela fonctionne! Merci beaucoup. – Lucia

0

Création du cadre de données en fonction de votre exemple:

df <- read.table(text = 
"id V1 V2 
1  a  1 
1  b  2 
2  a  2 
2  c  3 
3  a  4", h = T) 

Depuis vous voulez supprimer des lignes au hasard, d'abord trier les lignes de votre trame de données au hasard:

df <- df[sample(nrow(df)),] 

Ensuite, supprimer les doublons dans l'ordre d'apparition:

df <- df[!duplicated(df$id),] 

maintenant Classez trame de données retour:

df <- df[with(df, order(id)),] 

Rappelez-vous pour modifier df par votre nom de bloc de données.