2016-10-07 3 views
3

Ich muss eine Funktion schreiben, die einen gruppierten Datenrahmen (von dplyr) aufnimmt und für jede Gruppe einen Plot erstellt, wobei der Titel beschreibt, für welche Gruppe er bestimmt ist. Der Kicker ist ich weiß nicht, was die Gruppierungsvariable ist, oder wie viele es wird.Beschreibung der Gruppen aus einem gruppierten Datenrahmen

Ich habe etwas zusammengehackt mit groups, um die Gruppierungsvariablen zu erhalten und dann auf den Wert mit .[1,g] zugreifen, wobei g eine Zeichenversion der Gruppierungsvariablen Namen ist, wie unten.

Obwohl ich neu bei dplyr bin, fühlt sich das wie der falsche Weg an, das heißt, es ist nicht wirklich eine native Art, es zu tun. Es funktioniert in den kleinen Tests, die ich gemacht habe, aber ich bin besorgt, dass es in einigen seltsamen Umständen versagen wird, die ich nicht vorhergesehen habe. Wie würdest du das alles machen? Gibt es eine weitere dplyr -Errichtung?

Auf die seltsame Chance, dass was ich getan habe, ist eigentlich eine gute Idee, ich habe es als Antwort für Sie alle gepostet, um über entsprechend abzustimmen.

Antwort

0

Dies ist, was ich zusammen gehackt habe; Wie in der Frage beschrieben, verwendet es groups, um die Gruppierungsvariablen abzurufen und dann auf den Wert mit .[1,g] zuzugreifen, wobei g eine Zeichenversion der Namen der Gruppierungsvariablen ist (siehe unten).

Anstatt einen Plot zu erstellen, wird nur ein Datenrahmen mit dem Titel als Variable erstellt.

library(dplyr) 
d <- as.tbl(data.frame(expand.grid(A=1:3,B=1:2,y=1:2))) 

d1 <- d %>% group_by(A) 
g <- unlist(lapply(groups(d1), paste)) 
d1 %>% do(data.frame(title=paste(paste(g, "=", .[1,g]), collapse=", "), stringsAsFactors=FALSE)) 

## Source: local data frame [3 x 2] 
## Groups: A [3] 
## 
##  A title 
## <int> <chr> 
## 1  1 A = 1 
## 2  2 A = 2 
## 3  3 A = 3 

d1 <- d %>% group_by(A, B) 
g <- unlist(lapply(groups(d1), paste)) 
d1 %>% do(data.frame(title=paste(paste(g, "=", .[1,g]), collapse=", "), stringsAsFactors=FALSE)) 
## Source: local data frame [6 x 3] 
## Groups: A, B [6] 
## 
##  A  B  title 
## <int> <int>  <chr> 
## 1  1  1 A = 1, B = 1 
## 2  1  2 A = 1, B = 2 
## 3  2  1 A = 2, B = 1 
## 4  2  2 A = 2, B = 2 
## 5  3  1 A = 3, B = 1 
## 6  3  2 A = 3, B = 2 
2
library(data.table) 

setDT(d) # or create directly as data.table 

par(mfrow = c(2, 3)) 

d[, plot(y, main = paste(names(.BY), .BY, sep = "=", collapse = ", ")), by = .(A, B)] 

enter image description here

+0

Also, wenn jemand übergibt mir einen Datenrahmen gruppiert, wie verwende ich diese Gruppen in der durch? – Aaron

+0

Sagen Sie jemandem, er soll aufhören, Zeit zu verschwenden, indem er Ihnen "gruppierte" Datenrahmen übergibt. Aber wenn es ihnen egal ist und darauf besteht, benutze 'by = c (as.character (groups (their_grouped_data.frame)))' – eddi

+0

Kein großer Fan des neuen dplyr-Krams, wie? – Aaron

Verwandte Themen