Wie summiere ich die Spaltenwerte von data.frame?

76

Ich habe einen Datenrahmen mit mehreren Spalten; einige numerische und einige Zeichen. Wie berechnet man die Summe einer bestimmten Spalte? Ich habe für diese gegoogelt und ich sehe zahlreiche Funktionen ( sum, cumsum, rowsum, rowSums, colSums, aggregate, apply) , aber ich kann nicht Sinn des Ganzen machen.

Angenommen, ich habe einen Datenrahmen peoplemit den folgenden Spalten

people <- read(
  text = 
    "Name Height Weight
    Mary 65     110
    John 70     200
    Jane 64     115", 
  header = TRUE
)
…

Wie bekomme ich die Summe aller Gewichte?

Nutzer
quelle

Antworten:

105

Sie können einfach verwenden sum(people$Weight).

sumfasst einen Vektor zusammen und people$Weightruft die Gewichtungsspalte aus Ihrem Datenrahmen ab.

Hinweis - Sie können mit eingebauter Hilfe bekommen ?sum, ?colSumsusw. (übrigens, colSumswerden Sie die Summe für jede Spalte).

mathematisch.Kaffee
quelle
2
wenn ich das mache bekomme ich : [1] NA. Ich habe mir die Daten für diese Spalte angesehen und die allerletzte Zeile hat NA. Ist das der Grund?
Benutzer
10
Ja, deshalb. Sie können die NAs ignorieren, wenn Sie möchten über sum(people$Weight,na.rm=TRUE)(Sie können über diese Option in lesen ?sum).
mathematisch.Kaffee
3

Um Werte zu summieren, müssen data.frameSie sie zuerst als Vektor extrahieren.

Es gibt verschiedene Möglichkeiten:

# $ operatior
x <- people$Weight
x
# [1] 65 70 64

Oder mit [, ]Matrix ähnlich:

x <- people[, 'Weight']
x
# [1] 65 70 64

Sobald Sie den Vektor haben, können Sie eine beliebige Vektor-Skalar-Funktion verwenden, um das Ergebnis zu aggregieren:

sum(people[, 'Weight'])
# [1] 199

Wenn Ihre Daten NA-Werte enthalten, sollten Sie folgende na.rmParameter angeben :

sum(people[, 'Weight'], na.rm = TRUE)
Bulat
quelle
1

Wenn Sie 'NA'-Werte in der Spalte haben, dann

sum(as.numeric(JuneData1$Account.Balance), na.rm = TRUE)
Dheeraj
quelle
1

nach dem colsum bestellen:

order(colSums(people),decreasing=TRUE)

wenn mehr als 20+ Spalten

order(colSums(people[,c(5:25)],decreasing=TRUE) ##in case of keeping the first 4 columns remaining.
Sai Saran
quelle