Häufigkeit der Zeilen nach ID

8

Der Datensatz enthält drei Variablen: ID, Geschlecht und Grad (Faktor).

%Vor%

Für jede ID muss ich sehen, wie viele eindeutige Noten wir haben, und dann eine neue Spalte (Call N) erstellen, um die Notenhäufigkeit zu speichern. Zum Beispiel haben wir für ID = 1 fünf eindeutige Werte für "Note", also N = 4; Für ID = 2 haben wir zwei eindeutige Werte für "Grade", also N = 2; Für ID = 4 haben wir zwei eindeutige Werte für "Grad" (NA ignorieren, also N = 2).

Der endgültige Datensatz ist

%Vor%     
user9292 30.11.2015, 20:16
quelle

6 Antworten

9

Sie könnten das Paket data.table :

verwenden %Vor%

Sehr kurz, lesbar und schnell. Es kann auch in Basis-R erfolgen:

%Vor%

Da es Diskussionen gab, was schneller ist, sollten wir ein Benchmarking durchführen.

Gegebene Datenmenge:

%Vor%

Größerer Datensatz: (10000 Beobachtungen, 1000 IDs)

%Vor%     
Heroka 30.11.2015, 20:21
quelle
11

Mit diesem letzten Commit hat uniqueN ein Argument na.rm , das wir verwenden können wie folgt:

%Vor%

Dies wird ab der nächsten stabilen Version auf CRAN (v1.9.8) verfügbar sein. Alternativ können Sie auch die aktuelle Devel-Version (v1.9.7) installieren, indem Sie die Anleitung hier befolgen, um es auszuprobieren aus.

Mit data.table könnten Sie dies wie folgt tun:

%Vor%

oder:

%Vor%

was ergibt:

%Vor%     
Jaap 30.11.2015 20:22
quelle
7

Eine dplyr-Option, die dplyr::n_distinct und na.rm -argument verwendet:

%Vor%     
docendo discimus 30.11.2015 20:42
quelle
5

Sieht aus, als hätten wir mehrere Stimmen für data.table , aber Sie könnten auch die Basis-R-Funktion ave() :

verwenden %Vor%     
Sam Dickson 30.11.2015 20:27
quelle
4

verwende tapply und lookup table

%Vor%     
GL_Li 30.11.2015 20:36
quelle
0

Hier ist eine dplyr-Methode. Ich habe die Übersichtstabelle für saubere Gründe getrennt.

%Vor%     
bramtayl 30.11.2015 20:40
quelle

Tags und Links