Summenzeilen in data.frame oder Matrix


79

Ich habe einen sehr großen Datenrahmen mit Zeilen als Beobachtungen und Spalten als genetische Marker. Ich möchte eine neue Spalte erstellen, die die Summe einer ausgewählten Anzahl von Spalten für jede Beobachtung mit R enthält.

Wenn ich 200 Spalten und 100 Zeilen habe, möchte ich eine neue Spalte mit 100 Zeilen mit der Summe der Spalten 43 bis 167 erstellen. Die Spalten haben entweder 1 oder 0. Mit der neuen Spalte, die die Summe jeder Spalte enthält Reihe, ich werde in der Lage sein, die Personen zu sortieren, die die meisten genetischen Marker haben.

Ich denke, es ist etwas in der Nähe von:

data$new=sum(data$[,43:167])

Antworten:


102

Sie können verwenden rowSums

rowSums(data) sollte dir geben, was du willst.


16
Und für OP-Problemdata$new <- rowSums(data[43:167])
Marek

5
Um jemandem Zeit zu sparen, vermeiden Sie vielleicht Verwechslungen mit Funktionen, rowsumdie etwas anderes bewirken!
Augustin

37

Die rowSums-Funktion (wie Greg erwähnt) macht, was Sie wollen, aber Sie mischen Teilmengen-Techniken in Ihrer Antwort. Verwenden Sie nicht "$", wenn Sie "[]" verwenden. Ihr Code sollte ungefähr so ​​aussehen:

data$new <- rowSums( data[,43:167] )

Wenn Sie eine andere Funktion als sum verwenden möchten, lesen Sie? Anwenden, um allgemeine Funktionen zeilen- oder spaltenübergreifend anzuwenden.


Ich bin nicht sicher, warum ich diesen Fehler bekommen habe: Fehler in rowSums (einkommensdaten): 'x' muss numerisch sein
munmunbb

1
@munmunbb, Sie haben diesen Fehler erhalten, weil er incomeDatanicht numerisch ist. Verwenden Sie so etwas wie, um str(incomeData)zu sehen, was es ist, und konvertieren Sie es dann möglicherweise in eine numerische Matrix.
Greg Snow

5

Ich kam hierher in der Hoffnung, einen Weg zu finden, um die Summe über alle Spalten in einer Datentabelle zu erhalten und auf Probleme bei der Implementierung der oben genannten Lösungen zu stoßen. Eine Möglichkeit, eine Spalte mit der Summe über alle Spalten hinweg hinzuzufügen, verwendet die folgende cbindFunktion:

cbind(data, total = rowSums(data))

Diese Methode fügt totalden Daten eine Spalte hinzu und vermeidet das Ausrichtungsproblem, das beim Versuch entsteht, mithilfe der oben genannten Lösungen über ALLE Spalten zu summieren (eine Erläuterung dieses Problems finden Sie im folgenden Beitrag).

Hinzufügen einer neuen Spalte zum Matrixfehler


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.