Ich muss selektiv Werte aus einer Reihe von Spalten in meinem Datenrahmen über Zeilen hinweg hinzufügen. Werte können die Ganzzahlen 0, 1, 2 oder 3 annehmen. Die Summe von 2s und 3s (nicht die Anzahl von 2s und 3s, das ist einfach) gibt die "Intensität" dessen, was wir messen. Nehmen wir an, mein Datenrahmen wäre 60 Spalten lang, und ich wollte nur die Spalten 2 bis 11 betrachten. Der Excel-Code, um dies (in einer Richtung) zu erreichen, ist ziemlich trivial: =sumif(a2:a11,">1")
. Dies würde alle 2s und 3s in diesem Bereich hinzufügen.Kurzer R-Code entspricht der Sumif-Funktion in Excel - besonders angewendet über Datenrahmen Zeilen
Während ich in der Vergangenheit aggregate()
verwendet habe, waren die meisten Antworten zu diesem Thema nicht wirklich zu tun, was ich tun wollte, und ich war nicht in der Lage, einen Weg zu finden, aggregate()
so zu funktionieren, wie ich erforderlich. Ich war auch verblüfft, indem ich versuchte, rowSums()
dafür zu bekommen.
Schließlich wurde mir klar, ich folgendes tun könnte:
apply(data[,2:11], 1, function(x)sum(2*(x==2), 3*(x==3), na.rm=T))
Dies ist bei weitem die schnellste und eleganteste Weg, fand ich meine besondere gewünschte Verhalten entspricht Excel sumif
replizieren.
Wenn jemand eine noch bessere Methode hat, würde ich mich freuen, es zu hören.
'sum_row_if' von' expss' Paket : 'sum_row_if (gt (1), df [, 2:11])' Offenlegung: Ich bin der pa Ckage Autor. –
Sehr hilfreich, danke Gregory. –