Ich möchte den Mittelwert über einen Datenrahmen von Werten ermitteln. Zum Beispiel, wenn ich folgende Daten habe:
ID Value Status
1 10 A
2 15 B
3 20 A
Und ich möchte den Mittelwert aller Werte mit dem Status A darin ermitteln. Wie würde ich das tun
Hier ist mein Versuch:
dataframe$balance.mean(dataframe$status == "A")
Aber ich bekomme immer einen Fehler, der besagt Error: attempt to apply non-function
. Kann mir jemand helfen? Vielen Dank!
Antworten:
12 für die Antwort № 1Wenn ich Ihre Anforderung klar verstanden habe, sollte Folgendes Ihre Anforderung erfüllen:
id<-c(1,2,3)
val<-c(10,15,20)
sta<-c("A","B","A")
df<-data.frame(id,val,sta)
mean(df$val[df$sta=="A"])
3 für die Antwort № 2
Erinnere dich daran ()
wird für Funktionsaufrufe verwendet, []
werden für das Subsetting verwendet. Sie rufen jetzt eine Funktion an, während tatsächlich keine Funktion vorhanden ist.
In einem allgemeineren Sinn verwende ich diese Dinge gerne plyr
, obwohl data.table
ist eine tolle andere Option.
library(plyr)
ddply(dataframe, .(Status), summarize, mean_value = mean(Value))
Dies wird Ihnen ein neues geben data.frame
mit den Durchschnittswerten von Value
für jeden eindeutigen Wert von Status
.
3 für die Antwort № 3
Wie @PaulHiemstra anspielte, gibt es eine saubere Sache data.table
Lösung, die wäre:
library(data.table)
DT[Status=="A", mean(val)]
woher DT <- as.data.table(your_data_frame)
oder Sie können den Schlüssel für schnellere Ergebnisse einstellen:
setkey(DT, "status")
# this will produce a data.table, not a single
DT["A", mean(val)]
# This produces a single number
DT["A"] [, mean(val)]