r - Clean way to reorder tidyr spread after nest and purrr map -


consider following:

library(tidyverse) library(broom)  tidy.quants <- mtcars %>%   nest(-cyl) %>%   mutate(quantiles = map(data, ~ quantile(.$mpg))) %>%   unnest(map(quantiles, tidy))  tidy.quants #> # tibble: 15 x 3 #>      cyl names     x #>    <dbl> <chr> <dbl> #>  1     6    0% 17.80 #>  2     6   25% 18.65 #>  3     6   50% 19.70 #>  4     6   75% 21.00 #>  5     6  100% 21.40 #>  6     4    0% 21.40 #>  7     4   25% 22.80 #>  8     4   50% 26.00 #>  9     4   75% 30.40 #> 10     4  100% 33.90 #> 11     8    0% 10.40 #> 12     8   25% 14.40 #> 13     8   50% 15.20 #> 14     8   75% 16.25 #> 15     8  100% 19.20 

which great , tidy, however, when attempting spread (or pass plot), names column returns in (somewhat) unexpected order:

tidy.quants %>% spread(names, x) #> # tibble: 3 x 6 #>     cyl  `0%` `100%` `25%` `50%` `75%` #> * <dbl> <dbl>  <dbl> <dbl> <dbl> <dbl> #> 1     4  21.4   33.9 22.80  26.0 30.40 #> 2     6  17.8   21.4 18.65  19.7 21.00 #> 3     8  10.4   19.2 14.40  15.2 16.25  ggplot(tidy.quants, aes(x = names, y = x, color = factor(cyl))) +   geom_point() 

enter image description here

is there clean/idiomatic way have have names return in expected order? is, 0%, 25%, 50%, 75%, 100% instead of 0%, 100%, 25%, 50%, 75%?

you can try gtools::mixedsort, can sort strings embedded numbers; after getting sorted labels mixedsort(unique(names)), similar color, can make names(x axis variable) factor sorted values levels, ggplot should able display x axis label in correct order:

library(gtools) ggplot(tidy.quants, aes(x = factor(names, levels = mixedsort(unique(names))), y = x, color = factor(cyl))) +     geom_point() + xlab('names') 

enter image description here


similar idea spread:

tidy.quants %>%      mutate(names = factor(names, mixedsort(unique(names)))) %>%      spread(names, x)  # tibble: 3 x 6 #    cyl  `0%` `25%` `50%` `75%` `100%` #* <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl> #1     4  21.4 22.80  26.0 30.40   33.9 #2     6  17.8 18.65  19.7 21.00   21.4 #3     8  10.4 14.40  15.2 16.25   19.2 

Comments

Popular posts from this blog

angular - Ionic slides - dynamically add slides before and after -

minify - Minimizing css files -

Add a dynamic header in angular 2 http provider -