Ich bin relativ neu zu R, und versuchen, ddply & aus dem Plyr-Paket zusammenzufassen. This post fast, aber nicht ganz, beantwortet meine Frage. Ich könnte eine zusätzliche Erklärung/Erklärung verwenden.Verwenden Sie ddply innerhalb einer Funktion und enthalten Variable von Interesse als Argument
Mein Problem:
Ich möchte eine einfache Funktion erstellen deskriptiven Statistik zusammenzufassen, durch Gruppe, für eine bestimmte Variable. Im Gegensatz zum verknüpften Beitrag möchte ich die Variable von Interesse als Argument für die Funktion verwenden. Wie bereits auf dieser Seite diskutiert worden ist, funktioniert dies:
require(plyr)
ddply(mtcars, ~ cyl, summarise,
mean = mean(hp),
sd = sd(hp),
min = min(hp),
max = max(hp)
)
Aber dies nicht:
descriptives_by_group <- function(dataset, group, x)
{
ddply(dataset, ~ group, summarise,
mean = mean(x),
sd = sd(x),
min = min(x),
max = max(x)
)
}
descriptives_by_group(mtcars, cyl, hp)
Wegen des Umfangs der Daten, mit denen ich arbeite, würde Ich mag Lage sein, um eine Funktion zu haben, die es mir ermöglicht, die für mich interessante Variable sowie die Datenmenge und Gruppierungsvariable zu spezifizieren.
Ich habe versucht, die verschiedenen gefundenen Lösungen here zu bearbeiten, um mein Problem zu adressieren, aber ich verstehe den Code nicht gut genug, um es erfolgreich zu machen.
Das ursprüngliche Plakat den folgenden Beispiel-Datensatz verwendet wird:
a = c(1,2,3,4)
b = c(0,0,1,1)
c = c(5,6,7,8)
df = data.frame(a,b,c)
sv = c("b")
mit der gewünschten Ausgabe:
b Ave
1 0 1.5
2 1 3.5
und die Lösung von Hadley gebilligt wurden:
myFunction <- function(x, y){
NewColName <- "a"
z <- ddply(x, y, .fun = function(xx,col){
c(Ave = mean(xx[,col],na.rm=TRUE))},
NewColName)
return(z)
}
Wo myFunction(df, sv)
Renditen die gewünschte Ausgabe.
Ich habe versucht, den Code Stück für Stück aufzuschlüsseln, um zu sehen, ob ich durch besseres Verständnis der zugrundeliegenden Mechanik den Code so modifizieren könnte, dass er ein Argument für die Funktion enthält, die an was übergeben wird Beispiel: "NewColName" (die Variable, zu der Sie Informationen erhalten möchten). Aber ich habe keinen Erfolg. Meine Schwierigkeit ist, dass ich nicht verstehe, was mit (xx[,col])
passiert. Ich weiß, dass der Mittelwert (xx [, col]) den Mittelwert der Spalte mit dem Index col
für den Datenrahmen xx
annehmen sollte. Aber ich verstehe nicht, woher die anonyme Funktion diese Werte liest.
Könnte mir bitte jemand helfen, dies zu analysieren? Ich habe Stunden mit einer trivialen Aufgabe verschwendet, die ich leicht mit sehr repetitivem Code und/oder mit Subsetting erreichen konnte, aber ich habe aufgelegt, mein Skript einfacher und eleganter zu machen und das "Warum" dieses Problems zu verstehen seine Lösung (en).
PS Ich habe mir die describeBy-Funktion aus dem Paket psych angesehen, aber soweit ich das beurteilen kann, lässt sie nicht die Variablen zu, für die Werte zurückgegeben werden sollen, und löst daher nicht mein Problem .
Ich bin nicht sicher, ich unde rstand. 'ddply' akzeptiert einen Zeichenvektor von Gruppierungsvariablen. Wie in, 'ddply (Daten, c ('var1', 'var2'), ...)'. – joran
Schauen Sie sich auch 'colwise' an – hadley
Das Problem war, dass das dritte Argument in 'summarise' übergeben wurde. –