2016-05-16 11 views
0

So habe ich Daten auf dem langen Format über die Menschen der allgemeinen Chemie 1 in einer Universität zwischen 2005 und 2015Halten min Wert von zwei oder mehr Beobachtungen in R

Die Daten nehmen in etwa so aussehen

ID Term Grade Repeated 
260 2010  F   1 
260 2011  F   1 
260 2012  C   0 
203 2011  B   0 
204 2012  D   1 
204 2013  B   1 

Wie Sie sehen können, nahmen einige Leute die Klasse nur einmal, und einige wiederholten es ein- oder zweimal. Ich bin daran interessiert, den Grad des ersten Mal, wenn sie den Kurs belegten, beizubehalten.

Etwas ID wiederholt keepd die min (TERM) oder so etwas? Ich habe wie 250000 Zeilen

Vielen Dank!

Antwort

1

Wenn Ihr Datenrahmen von Term sortiert wird dann

df[!duplicated(df$ID),] 
# ID Term Grade Repeated 
#1 260 2010  F  1 
#4 203 2011  B  0 
#5 204 2012  D  1 
0

Mit dplyr Paket, können Sie es wie folgt tun:

library(dplyr) 
df %>% group_by(ID) %>% filter(Term == min(Term)) 

Source: local data frame [3 x 4] 
Groups: ID [3] 

    ID Term Grade Repeated 
    <int> <int> <chr> <int> 
1 260 2010  F  1 
2 203 2011  B  0 
3 204 2012  D  1 

Eine weitere Option von Begriff zu vereinbaren ist und nehmen Sie die erste als folgt:

df %>% arrange(ID, Term) %>% group_by(ID) %>% slice(1) 

Geben Sie die gleiche Ausgabe, aber in einem differen t Auftrag aus arrange:

Source: local data frame [3 x 4] 
Groups: ID [3] 

    ID Term Grade Repeated 
    <int> <int> <chr> <int> 
1 203 2011  B  0 
2 204 2012  D  1 
3 260 2010  F  1 
0

Wir verwenden unique mit by Option nach order ing von 'ID' und 'Bezeichnen Sie'

library(data.table) 
unique(setorder(setDT(df1), ID, Term), by = "ID") 
# ID Term Grade Repeated 
#1: 203 2011  B  0 
#2: 204 2012  D  1 
#3: 260 2010  F  1