5 Stimmen

Zusammenfassende Statistiken mit ddply

Ich möchte eine Funktion schreiben, die ddply die die zusammenfassende Statistik auf der Grundlage der Namen von zwei Spalten von data.frame mat .

  • mat ist eine große data.frame mit den Namen der Spalten "metric", "length", "species", "tree", ...,"index"

  • index ist ein Faktor mit 2 Stufen "Short", "Long"

  • "metric", "length", "species", "tree" und andere sind alle kontinuierliche Variablen

Funktion:

summary1 <- function(arg1,arg2) {
    ...

    ss <- ddply(mat, .(index), function(X) data.frame(
        arg1 = as.list(summary(X$arg1)),
        arg2 = as.list(summary(X$arg2)),
        .parallel = FALSE)

    ss
}

Ich erwarte, dass die Ausgabe nach dem Aufruf folgendermaßen aussieht summary1("metric","length")

Short metric.Min. metric.1st.Qu. metric.Median metric.Mean metric.3rd.Qu. metric.Max. length.Min. length.1st.Qu. length
.Median length.Mean length.3rd.Qu. length.Max. 

....

Long metric.Min. metric.1st.Qu. metric.Median metric.Mean metric.3rd.Qu. metric.Max. length.Min. length.1st.Qu. length
.Median length.Mean length.3rd.Qu. length.Max.

....

Die Funktion erzeugt im Moment nicht die gewünschte Ausgabe? Welche Änderung sollte hier vorgenommen werden?

Vielen Dank für Ihre Hilfe.


Hier ist ein Beispiel für ein Spielzeug

mat <- data.frame(
    metric = rpois(10,10), length = rpois(10,10), species = rpois(10,10),
    tree = rpois(10,10), index = c(rep("Short",5),rep("Long",5))
)

4voto

Marek Punkte 47395

En Nick schrieb in seiner Antwort können Sie nicht verwenden $ auf die als Zeichenname übergebene Referenzvariable. Wenn Sie schreiben X$arg1 entonces R Suche nach Spalte namens "arg1" en data.frame X . Sie können darauf verweisen, indem Sie entweder X[,arg1] o X[[arg1]] .

Und wenn Sie eine schön benannte Ausgabe wünschen, schlage ich folgende Lösung vor:

summary1 <- function(arg1, arg2) {

    ss <- ddply(mat, .(index), function(X) data.frame(
        setNames(
            list(as.list(summary(X[[arg1]])), as.list(summary(X[[arg2]]))),
            c(arg1,arg2)
            )), .parallel = FALSE)

    ss
}
summary1("metric","length")

Die Ausgabe für Spielzeugdaten lautet:

  index metric.Min. metric.1st.Qu. metric.Median metric.Mean metric.3rd.Qu.
1  Long           5              7            10         8.6             10
2 Short           7              7             9         8.8             10
  metric.Max. length.Min. length.1st.Qu. length.Median length.Mean length.3rd.Qu.
1          11           9             10            11        10.8             12
2          11           4              9             9         9.0             11
  length.Max.
1          12
2          12

1voto

Nick Sabbe Punkte 11524

Ist das eher das, was Sie wollen?

summary1 <- function(arg1,arg2) {
ss <- ddply(mat, .(index), function(X){ data.frame(
    arg1 = as.list(summary(X[,arg1])),
    arg2 = as.list(summary(X[,arg2])),
    .parallel = FALSE)})
ss
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X