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:
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% Versuchen Sie es mit Reduce
, um +
-Aufrufe miteinander zu verketten:
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:
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.
Tags und Links r data.table