2016-04-15 2 views
0

sample:R - Nummer Einzigartige Vals in Col1 einer Datentabelle, wenn Col2> Col3

ID  Score1  Score2 
1  100   88 
1  96   94 
1  94   95 
2  100   100 
2  98   94 
3  77   88 

Deshalb möchte ich der Rückgabewert 2 sein, da gibt es zwei einzigartige Menschen, die eine Instanz, wo Score1> Ergebnis2.

Für Reproduzierbarkeit:

df = data.frame(ID=c(1,1,1,2,2,3), Score1=c(100,96,94,100,98,77), Score2=c(88,94,95,100,94,88)) 
ID Score1 S 

Ich dachte

length(unique(which(df$Score1 > df$Score2))) 

jedoch die 3 zurückgibt, klar, weil es nicht für nicht-Konto für die df$ID suchen, der einzigartig ist, nur die Anzahl der eindeutigen Vorkommen. Wie kann ich erklären, dass ich die einzigartige Anzahl von einzigartigen df$ID möchte?

Antwort

6

Ich glaube, du bist für diese in base R suchen:

length(unique(df$ID[df$Score1 > df$Score2])) 
[1] 2 

Oder mit data.table:

library(data.table) 
setDT(df)[Score1 > Score2, uniqueN(ID)] 

Oder dplyr:

library(dplyr) 
df %>% filter(Score1 > Score2) %>% { n_distinct(.$ID) } 
+0

Ja! Das ist genau das, was ich nicht finden konnte. Vielen Dank. Ich konnte nicht herausfinden, wie man die $ ID mit der Aussage integriert ... entpuppt sich, ich brauchte das nicht! – Jibril

0

Aufbauend auf Ihren Code, Erhalten Sie unique auf ID

length(unique(df[df$Score1>df$Score2,1])) 
+1

Verwenden Sie keine Spaltennummern – MichaelChirico

+0

@MichaelChirico, warum nicht? – Ananta

+2

in der Regel ist es überhaupt nicht robust. Die Verwendung von Spaltennummern kann zu schwer erkennbaren Fehlern führen, wenn Spalten zu einem späteren Zeitpunkt im Code hinzugefügt/gelöscht/neu angeordnet werden – MichaelChirico