2017-10-09 7 views
-1
set.seed(3) 
mydata <- data.frame(id = c(1:5), 
      score = c(rnorm(5, 0, 1))) 
ids <- c(1, 2, 3, 3) 
> subset(mydata, id %in% ids) 
    id  score 
1 1 -0.9619334 
2 2 -0.2925257 
3 3 0.2587882 

J'ai une situation où je voudrais sous-ensemble toutes les lignes de telle sorte que son mydataid correspond à mon ids. Le hic est que mon ids a le numéro 3 répété deux fois. Mais il semble que subset seulement extrait les lignes uniques, je devine en raison de l'opérateur %in%. Cependant, ma sortie désirée estR: comment sous-ensemble des lignes en double de data.frame

> subset(mydata, id %in% ids) 
     id  score 
    1 1 -0.9619334 
    2 2 -0.2925257 
    3 3 0.2587882 
    4 3 0.2587882 

J'ai aussi essayé d'utiliser le lieu opérateur ==. Cependant, cela ne semblait pas faire l'affaire.

+0

Votre exemple de bloc de données n'inclut pas les lignes dupliquées. Si vos 'ids' ont un lien avec votre' mydata', vous devez le préciser. Ils n'ont pas la même longueur, selon quelles règles les associez-vous? –

+0

'mydata' n'a pas de lignes en double, c'est correct. Je veux juste pouvoir créer un 'data.frame' avec les lignes correspondant à mes' ids'. Donc si mes 'ids' étaient' c (1, 1, 1, 2, 2, 2) 'alors mon' data.frame 'désiré devrait avoir les première et deuxième lignes de 'mydata' répétées 3 fois chacune. – Adrian

+1

Donc votre 'ids' a la même longueur que' mydata'? Si oui, pouvez-vous s'il vous plaît modifier votre question pour refléter que –

Répondre

1

Plutôt que d'utiliser %in%, essayez d'utiliser sa fonction soeur match()

mydata[match(ids, mydata$id), ] 

Ceci renvoie les ID dupliqués.