R: data.table Anzahl! NA pro Zeile

8

Ich versuche, die Anzahl der Spalten, die keine NA enthalten, für jede Zeile zu zählen und diesen Wert in eine neue Spalte für diese Zeile einzufügen.

Beispieldaten:

%Vor%

Meine gewünschte Ausgabe würde eine neue Spalte num_obs enthalten, die die Anzahl der Nicht-NA-Einträge pro Zeile enthält:

%Vor%

Ich lese schon seit Stunden und bis jetzt ist das Beste, was ich mir ausgedacht habe, das Schleifen von Zeilen, was, wie ich weiß, in R oder data.table niemals ratsam ist. Ich bin sicher, es gibt einen besseren Weg, dies zu tun, bitte erleuchte mich.

Mein beschissener Weg:

%Vor%     
Reilstein 10.02.2016, 03:51
quelle

2 Antworten

13

Versuchen Sie es mit Reduce , um + -Aufrufe miteinander zu verketten:

%Vor%

Wenn die Geschwindigkeit entscheidend ist, können Sie etwas mehr mit Anandas Vorschlag, die Anzahl der bewerteten Spalten fest zu codieren, herausholen:

%Vor%

Benchmarking mit Anandas größerem data.table d von oben:

%Vor%     
thelatemail 10.02.2016, 04:40
quelle
6

Die zwei Optionen, die einem schnell einfallen, sind:

%Vor%

Das erste funktioniert, indem Sie eine Gruppe von nur einer Zeile pro Gruppe erstellen ( 1:nrow(d) ). Ohne das würde es nur die NA Werte innerhalb der gesamten Tabelle summieren.

Die zweite verwendet eine bereits sehr effiziente Basis-R-Funktion, rowSums .

Hier ist ein Benchmark für größere Daten:

%Vor%

Übrigens, die leere [] dient lediglich dazu, die resultierende data.table zu drucken. Dies ist erforderlich, wenn Sie die Ausgabe von set* functions in "data.table" zurückgeben möchten.

    
A5C1D2H2I1M1N2O1R2T1 10.02.2016 04:13
quelle

Tags und Links