2017-06-29 1 views
0

Ich habe Daten nach Unique ID und sortiert am Datum des Besuchs. Manche Leute haben mehrere Besuche. Die Daten sind im Langformat nach Besuch sortiert. Ich möchte nur eine Zeile des letzten Besuchs jeder Person wiederholen. Wie repliziert man nur bestimmte Zeilen in einem Datenrahmen?duplizieren/replizieren nur bestimmte Zeilen in einem Datenrahmen

id visit    glucose 
1  12 Jan 2015  12 
1  3 Feb 2015  8 
2  1 Feb 2015  13 
3  12 Jan 2015  7 
3  4 Feb 2015  13 
3  1 March 2015 8 
+0

Sie meinen den letzten Tag der jeweiligen ID zu halten? Wie 'df [dupliziert (df $ id),]'? – Sotos

Antwort

1

Wenn wir die letzte Zeile auf der Grundlage der ‚Besuch‘ für jeden ‚id‘ kopieren, dann können wir data.table verwenden. Konvertieren Sie die 'data.frame' auf 'data.table' (setDT(df1)), order von 'id' und 'Besuch', gruppiert nach 'id', wir die letzte Zeile (.N)

library(data.table) 
setDT(df1)[order(id, as.Date(visit, "%d %b %Y")), .SD[c(seq_len(.N), .N)], by = id] 
# id   visit glucose 
#1: 1 12 Jan 2015  12 
#2: 1 3 Feb 2015  8 
#3: 1 3 Feb 2015  8 
#4: 2 1 Feb 2015  13 
#5: 2 1 Feb 2015  13 
#6: 3 12 Jan 2015  7 
#7: 3 4 Feb 2015  13 
#8: 3 1 March 2015  8 
#9: 3 1 March 2015  8 

replizieren

Wenn wir wollen, nur die letzte Zeile für jeden ‚id‘

setDT(df1)[order(id, as.Date(visit, "%d %b %Y")), .SD[.N], id] 
+0

Dank dieser letzten Option funktioniert –

+0

Registerkarte <-setDT (t) [Reihenfolge (ID, as.Date (dcdate)), .SD [c (seq_len (.N), .N)], von = ID] arbeitete als die Datei wurde aus Excel importiert, so dass die Daten in Ordnung waren –

+0

@PaulRheeder Vielen Dank für die Kommentare. Sie können auch [hier] (https://www.google.co.in/?gfe_rd=cr&ei=ysFUWYO5DuWK8QfAiZO4Dg#q=stackoverflow+accept+answer) überprüfen. – akrun

Verwandte Themen