Ich versuche do
von dplyr
und tidy
von broom
zu verwenden, um einige Sachen ordentlich in einen Datenrahmen zu organisieren. Alles funktioniert gut. Aber jetzt versuche ich, auf der Grundlage der Gruppierung innerhalb des gleichen Rohres Wert zu mutieren, und ich kann es nicht funktioniert, was ich will:Bind Spalten zurückgegeben von Do/Tidy von dplyr und Besen funktioniert nicht wie erwartet
Beispiel (mit mtcars
Datensatz):
library(dplyr)
library(broom)
mtcars %>% group_by(cyl) %>% mutate(n = n()) %>% do(tidy(summary(.$mpg)))
Ich hatte gehofft, die Ausgabe von summary
pro Zyl mit der Anzahl der Beobachtungen zu erhalten, die ich in der Mitte berechnete. Allerdings habe ich nur die Ausgabe von summary
erhalten wie folgt:
Source: local data frame [3 x 7]
Groups: cyl [3]
cyl minimum q1 median mean q3 maximum
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 4 21.4 22.80 26.0 26.66 30.40 33.9
2 6 17.8 18.65 19.7 19.74 21.00 21.4
3 8 10.4 14.40 15.2 15.10 16.25 19.2
Ausgangswert n
fehlt.
Ich habe auch versucht bind_cols
und inner_join
wie folgt und beide Ergebnis in Fehler unten:
mtcars %>% group_by(cyl) %>% mutate(mpgMean = mean(mpg)) %>% inner_join(., do(tidy(summary(.$mpg))))
Error in args[[1]] : subscript out of bounds
mtcars %>% group_by(cyl) %>% mutate(n = n()) %>% bind_cols(do(tidy(summary(.$mpg))))
Error in args[[1]] : subscript out of bounds
Jede Idee, wie ich diese Arbeit machen kann?
Meine erwartete Ausgabe ist:
Joining by: "cyl"
Source: local data frame [3 x 8]
cyl n minimum q1 median mean q3 maximum
<dbl> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 4 11 21.4 22.80 26.0 26.66 30.40 33.9
2 6 7 17.8 18.65 19.7 19.74 21.00 21.4
3 8 14 10.4 14.40 15.2 15.10 16.25 19.2
Natürlich habe ich dieses Ergebnis bekommen kann dies zu tun:
inner_join(count(mtcars, cyl), mtcars %>% group_by(cyl) %>% do(tidy(summary(.$mpg))))
Aber für eine einzelne Rohr Lösung suchen (wenn möglich).
oder einfach: 'mtcars%>% group_by (Zyl)%>% mutieren (n = n ())%>% group_by (cyl, n)%>% do (sauber (zusammenfassung (. $ mpg))) ' – HubertL
Definitiv besser ... wünschte immer noch, es gäbe einen Weg, die Ausgabe von' do' und column bind zu nehmen . 'do' sagt, dass es einen Datenrahmen zurückgibt. – Gopala
Mit data.table: 'as.data.table (mtcars) [, c (. (N = .N), as.list (Zusammenfassung (mpg))), by = cyl]' – Frank