2017-05-16 5 views
0

Ich habe ein Beispiel DatenrahmenFinden N eindeutige Werte innerhalb ggplot

df <- data.frame(a = c(sample(LETTERS[1:5], 10, TRUE), "Z", "Z"), 
       b = c(rnorm(10), NA, NA)) 

und ich versuche, ein paar einfache Plotten zu tun und etwas Farbe hinzufügen. Ich kann dies leicht tun, zu wissen, wie viele a Werte gibt, bevor ich sogar Grundstück sein wird:

library(randomcoloR) 

df %>% 
    filter(!is.na(b)) %>% 
    ggplot() + 
    geom_bar(aes(x = a, y = b), 
      fill = randomColor(5), 
      stat = "summary", 
      fun.y = "mean") 

Aber was, wenn ich nicht weiß, wie viele a Werte wird es sein? Wie kann man die Anzahl der eindeutigen a Inline innerhalb die geom_xxx Aussage erhalten?

Mit n_distinct(a) funktioniert nicht und stellt den Fehler

df %>% 
    filter(!is.na(b)) %>% 
    ggplot() + 
    geom_bar(aes(x = a, y = b), 
      fill = randomColor(n_distinct(a)), 
      stat = "summary", 
      fun.y = "mean") 

Error in n_distinct_multi(list(...), na.rm) : object 'a' not found

Mit uniqueN() von data.table funktioniert nicht und stellt den Fehler:

library(data.table) 

df %>% 
    filter(!is.na(b)) %>% 
    ggplot() + 
    geom_bar(aes(x = a, y = b), 
      fill = randomColor(uniqueN(a)), 
      stat = "summary", 
      fun.y = "mean") 

Error in uniqueN(a) : object 'a' not found

unique(a) %>% length() Verwendung nicht funktioniert entweder, und bietet die sam Der Fehler ist unmittelbar darüber.

Kann ich die Anzahl der eindeutigen a Werte innerhalb einer geom_xxx Anweisung inline finden? Ich fühle mich, als würde ich hier etwas Offensichtliches vermissen.

Antwort

0

Sie könnten Rohr den Datenrahmen in eine anonyme Funktion:

df %>% 
    filter(!is.na(b)) %>% 
    (function(df) ({ 
    ggplot(df) + 
     geom_bar(aes(x = a, y = b), 
       fill = randomColor(length(unique(df$a))), 
       stat = "summary", 
       fun.y = "mean") 
    }))