2017-10-09 4 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 

ich eine Situation haben, der Teilmenge, wo Ich mag würde alle Zeilen von mydata solche der Teilmenge, dass seine id meine ids übereinstimmt. Der Haken ist, dass meine ids die Nummer 3 zweimal wiederholt hat. Aber es scheint, dass subset nur die eindeutigen Zeilen extrahiert, ich vermute aufgrund der Operator %in%. Allerdings ist meine gewünschte Ausgabe istR: wie doppelte Reihen von 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 

Ich habe auch stattdessen den == Operator zu verwenden versucht. Das schien jedoch nicht den gewünschten Effekt zu haben.

+0

Ihr Beispieldatenrahmen enthält keine doppelten Zeilen. Wenn deine 'ids' irgendeine Beziehung zu deinen' mydata' haben, musst du das klarstellen. Sie haben nicht die gleiche Länge, mit welchen Regeln verbinden Sie sie? –

+0

'mydata' hat keine doppelten Zeilen, das ist korrekt. Ich möchte nur ein 'dat.frame' mit den Zeilen erstellen können, die meinen' ids' entsprechen. Wenn also meine 'ids' c (1, 1, 1, 2, 2, 2) sind, dann sollte mein gewünschter 'dat.frame' die erste und die zweite Zeile von' mydata' jeweils dreimal wiederholen. – Adrian

+1

Also haben Ihre 'ids' die gleiche Länge wie' mydata'? Wenn ja, könnten Sie bitte Ihre Frage bearbeiten, um zu reflektieren, dass –

Antwort

1

Anstatt %in% verwenden, versuchen Sie es Schwester Funktion match()

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

Dadurch werden die duplizierten IDs zurück.