Hier ist mein Problem:dplyr Fassen wir zusammen: Erstellen von Variablen aus dem Namen Vektor
ich eine Funktion verwende, die einen benannten Vektor zurückgibt. Hier ist ein Spielzeug Beispiel:
toy_fn <- function(x) {
y <- c(mean(x), sum(x), median(x), sd(x))
names(y) <- c("Right", "Wrong", "Unanswered", "Invalid")
y
}
Ich verwende group_by in dplyr diese Funktion gelten für jede Gruppe (typische Split-apply-kombinieren). So, hier ist mein Spielzeug data.frame:
set.seed(1234567)
toy_df <- data.frame(id = 1:1000,
group = sample(letters, 1000, replace = TRUE),
value = runif(1000))
Und hier ist das Ergebnis, das ich für bin mit dem Ziel:
toy_summary <-
toy_df %>%
group_by(group) %>%
summarize(Right = toy_fn(value)["Right"],
Wrong = toy_fn(value)["Wrong"],
Unanswered = toy_fn(value)["Unanswered"],
Invalid = toy_fn(value)["Invalid"])
> toy_summary
Source: local data frame [26 x 5]
group Right Wrong Unanswered Invalid
1 a 0.5038394 20.15358 0.5905526 0.2846468
2 b 0.5048040 15.64892 0.5163702 0.2994544
3 c 0.5029442 21.62660 0.5072733 0.2465612
4 d 0.5124601 14.86134 0.5382463 0.2681955
5 e 0.4649483 17.66804 0.4426197 0.3075080
6 f 0.5622644 12.36982 0.6330269 0.2850609
7 g 0.4675324 14.96104 0.4692404 0.2746589
Es funktioniert! Aber es ist einfach nicht cool, die gleiche Funktion viermal aufzurufen. Ich möchte lieber dplyr, um den benannten Vektor zu erhalten und eine neue Variable für jedes Element im Vektor zu erstellen. So etwas wie das:
Dies funktioniert leider nicht, weil "Fehler: einen einzelnen Wert erwarten".
Ich dachte, ok, lassen Sie uns einfach den Vektor in eine data.frame
mit data.frame(as.list(x))
konvertieren. Aber das funktioniert auch nicht. Ich habe viele Dinge ausprobiert, aber ich konnte dplyr nicht glauben, dass es tatsächlich einen einzigen Wert (Beobachtung) für 4 verschiedene Variablen erhält. Gibt es eine Möglichkeit, dies zu erkennen?
es scheint nicht zu funktionieren, obwohl. –
Ich testete es auf meinem Computer - es funktioniert, der resultierende Datenrahmen braucht jedoch einige Parsing. –
was für ein Parsing ?, ..., ich konnte es mir nicht genau ansehen, weil ich es in meinem Handy überprüft habe. –