2017-10-11 7 views
0

J'ai un dataframe avec une colonne pour les dates, une colonne pour les valeurs et environ une demi-douzaine de colonnes booléennes:facette ggplot avec plusieurs colonnes booléennes

date  value   x1 x0 x2 x3 .... 
01/1999  2000   TRUE FALSE TRUE FALSE 
02/1999  5000   FALSE TRUE FALSE FALSE 
02/1999  6000   FALSE TRUE FALSE TRUE 
03/1999  5000   TRUE FALSE FALSE TRUE 

Maintenant, je voudrais tracer le compte de chaque entrée de date pour chaque x1 colonne, x0 ...: je peux facilement le faire par la trame de données et jeux partiels appelant ggplot chaque fois:

ggplot(subset, aes(date)) + geom_bar() 

Mais je me demande s'il y a un moyen de générer une seule parcelle avec facettes, avec 6 sous-placettes filtrées chacune pour x1, x2, x3 = TRUE

Répondre

1

Il semble que vous souhaitiez convertir la trame de données du format large au format long, avec toutes les colonnes booléennes rassemblées dans une seule colonne. Par exemple:

library(dplyr) 
library(tidyr) 

df %>% 
    gather(subset.variable, logic, -date, -value) %>% 
    filter(logic) %>% 
    ggplot(aes(date, value)) + 
    geom_point() +    # using geom_point for illustration 
    facet_wrap(~subset.variable) 

plot

Données d'échantillons utilisés:

set.seed(123) 
n = 200 
df <- data.frame(
    date = seq.Date(from = as.Date("1999-01-01"), 
        to = as.Date("1999-01-01") + n - 1, 
        by = 1), 
    value = rpois(n, lambda = 2), 
    x1 = sample(c(TRUE, FALSE), n, replace = T), 
    x2 = sample(c(TRUE, FALSE), n, replace = T), 
    x3 = sample(c(TRUE, FALSE), n, replace = T), 
    x4 = sample(c(TRUE, FALSE), n, replace = T), 
    x5 = sample(c(TRUE, FALSE), n, replace = T), 
    x6 = sample(c(TRUE, FALSE), n, replace = T) 
) 

> head(df) 
     date value x1 x2 x3 x4 x5 x6 
1 1999-01-01  1 TRUE FALSE TRUE TRUE TRUE FALSE 
2 1999-01-02  3 FALSE TRUE FALSE TRUE FALSE FALSE 
3 1999-01-03  2 FALSE FALSE TRUE TRUE TRUE TRUE 
4 1999-01-04  4 FALSE FALSE TRUE TRUE FALSE FALSE 
5 1999-01-05  4 TRUE TRUE TRUE TRUE FALSE TRUE 
6 1999-01-06  0 FALSE TRUE FALSE FALSE TRUE FALSE 
+0

Parfait! Fonctionne comme un charme. Je vous remercie – user2969402