Home > Mobile >  Customize the order of columns in tidyHtmlTable function
Customize the order of columns in tidyHtmlTable function

Time:12-21

I don't know how to order columns in tidyHtmlTable function from htmlTable package. The documentation says:

Columns are sorted by arrange(cgroup,header) where cgroup will be expanded to the columns of the cgroup argument, e.g. cgroup = c(a, b), header = c will become arrange(a,b,c). If you want to sort in non-alphabetic order you can provide a factor variable and that information will be retained.

How can I provide such factor variable? For example, in the doc example

library(magrittr)
library(tidyr)
library(dplyr)
library(htmlTable)
library(tibble)

td <- mtcars %>%
  as_tibble(rownames = "rnames") %>% 
  pivot_longer(names_to = "per_metric", 
               cols = c(hp, mpg, qsec))

tidy_summary <- td %>%
  group_by(cyl, gear, per_metric) %>% 
  summarise(Mean = round(mean(value), 1),
            SD = round(sd(value), 1),
            Min = round(min(value), 1),
            Max = round(max(value), 1),
            .groups = 'drop') %>%
  pivot_longer(names_to = "summary_stat", 
               cols = c(Mean, SD, Min, Max)) %>% 
  ungroup() %>% 
  mutate(gear = paste(gear, "Gears"),
         cyl = paste(cyl, "Cylinders"))

tidy_summary  %>% 
  arrange(per_metric, summary_stat) %>% 
  addHtmlTableStyle(align = "r") %>% 
  tidyHtmlTable(header = gear,
                cgroup = cyl,
                rnames = summary_stat,
                rgroup = per_metric)

if I want to maintain the order of rgroup and rnames but, for example, I want the columns in non-alphabetical order, like this:

4 Gears |3 Gears |5 Gears

How can I do that? Thank you.

CodePudding user response:

What we can do is to make the changes before tidyHtmlTable

How it works:

  1. mutate gear to factor class
  2. Use fct_relevel from forcats package (it is in tidyverse)
library(forcats)
tidy_summary  %>% 
  arrange(per_metric, summary_stat) %>% 
  addHtmlTableStyle(align = "r") %>% 
  mutate(gear = as.factor(gear),
         gear = fct_relevel(gear, "4 Gears", "3 Gears", "5 Gears")) %>% 
  tidyHtmlTable(header = gear,
                cgroup = cyl,
                rnames = summary_stat,
                rgroup = per_metric)

enter image description here

  •  Tags:  
  • r
  • Related