Search code examples
r

Adding labels to a table in R


I have this dataframe in R which I am later planning on creating a contingency table with:

z = structure(list(year_1 = c(2000L, 2000L, 2000L, 2000L, 2000L, 
2000L, 2000L, 2000L, 2000L, 2000L, 2000L, 2000L, 2000L, 2000L, 
2000L, 2000L, 2000L, 2000L, 2000L, 2000L, 2000L, 2001L, 2001L, 
2001L, 2001L, 2001L, 2001L, 2001L, 2001L, 2001L, 2001L, 2001L, 
2001L, 2001L, 2001L, 2001L, 2001L, 2001L, 2001L, 2001L, 2001L, 
2001L, 2002L, 2002L, 2002L, 2002L, 2002L, 2002L, 2002L, 2002L, 
2002L, 2002L, 2002L, 2002L, 2002L, 2002L, 2002L, 2002L, 2002L, 
2002L, 2002L, 2002L, 2002L, 2003L, 2003L, 2003L, 2003L, 2003L, 
2003L, 2003L, 2003L, 2003L, 2003L, 2003L, 2003L, 2003L, 2003L, 
2003L, 2003L, 2003L, 2003L, 2003L, 2003L, 2003L, 2004L, 2004L, 
2004L, 2004L, 2004L, 2004L, 2004L, 2004L, 2004L, 2004L, 2004L, 
2004L, 2004L, 2004L, 2004L, 2004L, 2004L, 2004L, 2004L, 2004L, 
2004L, 2005L, 2005L, 2005L, 2005L, 2005L, 2005L, 2005L, 2005L, 
2005L, 2005L, 2005L, 2005L, 2005L, 2005L, 2005L, 2005L, 2005L, 
2005L, 2005L, 2005L, 2005L, 2006L, 2006L, 2006L, 2006L, 2006L, 
2006L, 2006L, 2006L, 2006L, 2006L, 2006L, 2006L, 2006L, 2006L, 
2006L, 2006L, 2006L, 2006L, 2006L, 2006L, 2006L, 2007L, 2007L, 
2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 
2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 
2007L, 2008L, 2008L, 2008L, 2008L, 2008L, 2008L, 2008L, 2008L, 
2008L, 2008L, 2008L, 2008L, 2008L, 2008L, 2008L, 2008L, 2008L, 
2008L, 2008L, 2008L, 2008L, 2009L, 2009L, 2009L, 2009L, 2009L, 
2009L, 2009L, 2009L, 2009L, 2009L, 2009L, 2009L, 2009L, 2009L, 
2009L, 2009L, 2009L, 2009L, 2009L, 2009L, 2009L, 2010L, 2010L, 
2010L, 2010L, 2010L, 2010L, 2010L, 2010L, 2010L, 2010L, 2010L, 
2010L, 2010L, 2010L, 2010L, 2010L, 2010L, 2010L, 2010L, 2010L, 
2010L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 
2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 2011L, 
2011L, 2011L, 2011L, 2011L, 2012L, 2012L, 2012L, 2012L, 2012L, 
2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 
2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2013L, 2013L, 
2013L, 2013L, 2013L, 2013L, 2013L, 2013L, 2013L, 2013L, 2013L, 
2013L, 2013L, 2013L, 2013L, 2013L, 2013L, 2013L, 2013L, 2013L, 
2013L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 
2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 
2014L, 2014L, 2014L, 2014L, 2015L, 2015L, 2015L, 2015L, 2015L, 
2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 
2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 2016L, 2016L, 
2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 
2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 
2016L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 
2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 2017L, 
2017L, 2017L, 2017L, 2017L, 2018L, 2018L, 2018L, 2018L, 2018L, 
2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 
2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2018L, 2019L, 2019L, 
2019L, 2019L, 2019L, 2019L, 2019L, 2019L, 2019L, 2019L, 2019L, 
2019L, 2019L, 2019L, 2019L, 2019L, 2019L, 2019L, 2019L, 2019L, 
2019L, 2020L, 2020L, 2020L, 2020L, 2020L, 2020L, 2020L, 2020L, 
2020L, 2020L, 2020L, 2020L, 2020L, 2020L, 2020L, 2020L, 2020L, 
2020L, 2020L, 2020L, 2020L), year_2 = c(2000L, 2001L, 2002L, 
2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 
2012L, 2013L, 2014L, 2015L, 2016L, 2017L, 2018L, 2019L, 2020L, 
2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 
2009L, 2010L, 2011L, 2012L, 2013L, 2014L, 2015L, 2016L, 2017L, 
2018L, 2019L, 2020L, 2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 
2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L, 2013L, 2014L, 
2015L, 2016L, 2017L, 2018L, 2019L, 2020L, 2000L, 2001L, 2002L, 
2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 
2012L, 2013L, 2014L, 2015L, 2016L, 2017L, 2018L, 2019L, 2020L, 
2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 
2009L, 2010L, 2011L, 2012L, 2013L, 2014L, 2015L, 2016L, 2017L, 
2018L, 2019L, 2020L, 2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 
2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L, 2013L, 2014L, 
2015L, 2016L, 2017L, 2018L, 2019L, 2020L, 2000L, 2001L, 2002L, 
2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 
2012L, 2013L, 2014L, 2015L, 2016L, 2017L, 2018L, 2019L, 2020L, 
2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 
2009L, 2010L, 2011L, 2012L, 2013L, 2014L, 2015L, 2016L, 2017L, 
2018L, 2019L, 2020L, 2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 
2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L, 2013L, 2014L, 
2015L, 2016L, 2017L, 2018L, 2019L, 2020L, 2000L, 2001L, 2002L, 
2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 
2012L, 2013L, 2014L, 2015L, 2016L, 2017L, 2018L, 2019L, 2020L, 
2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 
2009L, 2010L, 2011L, 2012L, 2013L, 2014L, 2015L, 2016L, 2017L, 
2018L, 2019L, 2020L, 2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 
2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L, 2013L, 2014L, 
2015L, 2016L, 2017L, 2018L, 2019L, 2020L, 2000L, 2001L, 2002L, 
2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 
2012L, 2013L, 2014L, 2015L, 2016L, 2017L, 2018L, 2019L, 2020L, 
2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 
2009L, 2010L, 2011L, 2012L, 2013L, 2014L, 2015L, 2016L, 2017L, 
2018L, 2019L, 2020L, 2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 
2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L, 2013L, 2014L, 
2015L, 2016L, 2017L, 2018L, 2019L, 2020L, 2000L, 2001L, 2002L, 
2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 
2012L, 2013L, 2014L, 2015L, 2016L, 2017L, 2018L, 2019L, 2020L, 
2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 
2009L, 2010L, 2011L, 2012L, 2013L, 2014L, 2015L, 2016L, 2017L, 
2018L, 2019L, 2020L, 2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 
2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L, 2013L, 2014L, 
2015L, 2016L, 2017L, 2018L, 2019L, 2020L, 2000L, 2001L, 2002L, 
2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 
2012L, 2013L, 2014L, 2015L, 2016L, 2017L, 2018L, 2019L, 2020L, 
2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 
2009L, 2010L, 2011L, 2012L, 2013L, 2014L, 2015L, 2016L, 2017L, 
2018L, 2019L, 2020L, 2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 
2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L, 2013L, 2014L, 
2015L, 2016L, 2017L, 2018L, 2019L, 2020L), name_count = c(0L, 
0L, 1L, 3L, 1L, 1L, 4L, 1L, 3L, 2L, 3L, 3L, 1L, 2L, 4L, 0L, 4L, 
4L, 3L, 1L, 1L, 3L, 1L, 2L, 5L, 2L, 2L, 1L, 0L, 3L, 2L, 1L, 4L, 
0L, 2L, 4L, 2L, 3L, 4L, 2L, 2L, 1L, 2L, 2L, 1L, 4L, 3L, 2L, 2L, 
0L, 0L, 0L, 3L, 2L, 2L, 2L, 1L, 3L, 3L, 2L, 3L, 6L, 1L, 1L, 1L, 
1L, 3L, 2L, 1L, 2L, 4L, 2L, 3L, 1L, 5L, 1L, 3L, 1L, 1L, 0L, 0L, 
1L, 1L, 2L, 3L, 6L, 3L, 1L, 3L, 1L, 1L, 2L, 3L, 1L, 2L, 4L, 1L, 
1L, 3L, 2L, 5L, 4L, 3L, 2L, 5L, 4L, 4L, 2L, 6L, 3L, 5L, 1L, 1L, 
4L, 2L, 2L, 2L, 2L, 2L, 0L, 2L, 4L, 3L, 0L, 3L, 0L, 2L, 2L, 2L, 
3L, 5L, 0L, 1L, 4L, 2L, 2L, 2L, 4L, 7L, 1L, 1L, 1L, 2L, 2L, 0L, 
1L, 2L, 1L, 1L, 2L, 4L, 3L, 2L, 1L, 5L, 3L, 4L, 3L, 5L, 0L, 4L, 
2L, 3L, 1L, 5L, 2L, 3L, 2L, 0L, 5L, 3L, 5L, 2L, 9L, 1L, 3L, 2L, 
2L, 1L, 0L, 1L, 3L, 1L, 3L, 1L, 2L, 4L, 3L, 3L, 1L, 3L, 1L, 2L, 
1L, 3L, 1L, 5L, 2L, 4L, 1L, 2L, 5L, 1L, 3L, 3L, 1L, 5L, 1L, 3L, 
3L, 2L, 2L, 0L, 0L, 5L, 1L, 6L, 6L, 3L, 5L, 3L, 3L, 4L, 1L, 4L, 
1L, 0L, 6L, 3L, 1L, 4L, 1L, 1L, 2L, 5L, 2L, 3L, 2L, 2L, 2L, 4L, 
0L, 1L, 3L, 0L, 3L, 2L, 1L, 4L, 1L, 8L, 4L, 6L, 1L, 3L, 3L, 3L, 
1L, 2L, 1L, 1L, 0L, 1L, 4L, 1L, 1L, 1L, 2L, 3L, 3L, 3L, 0L, 1L, 
2L, 4L, 2L, 2L, 3L, 0L, 2L, 4L, 2L, 2L, 1L, 2L, 2L, 1L, 3L, 3L, 
1L, 3L, 2L, 4L, 1L, 1L, 4L, 3L, 5L, 1L, 6L, 1L, 4L, 0L, 4L, 2L, 
0L, 1L, 4L, 2L, 1L, 1L, 3L, 2L, 1L, 2L, 3L, 2L, 3L, 3L, 1L, 2L, 
3L, 1L, 0L, 4L, 2L, 2L, 1L, 3L, 3L, 2L, 1L, 1L, 0L, 1L, 3L, 2L, 
2L, 5L, 0L, 3L, 3L, 3L, 3L, 1L, 1L, 6L, 2L, 2L, 4L, 2L, 6L, 1L, 
5L, 2L, 2L, 1L, 2L, 2L, 0L, 0L, 1L, 2L, 3L, 2L, 4L, 0L, 6L, 1L, 
0L, 0L, 2L, 3L, 7L, 2L, 1L, 2L, 2L, 0L, 1L, 2L, 1L, 1L, 3L, 1L, 
1L, 4L, 2L, 6L, 2L, 1L, 4L, 5L, 2L, 3L, 4L, 3L, 2L, 3L, 7L, 2L, 
3L, 4L, 2L, 2L, 2L, 2L, 1L, 3L, 2L, 0L, 0L, 2L, 0L, 0L, 0L, 1L, 
0L, 2L, 0L, 2L, 2L, 2L, 1L, 0L, 0L, 2L, 3L, 4L, 7L, 3L, 3L, 1L, 
1L, 1L, 3L, 2L, 2L, 1L, 4L, 2L)), row.names = c(NA, -441L), class = "data.frame")

Using the following code, I made a contingency table and tried to add labels:

library(reshape2)

contingency_table <- dcast(z, year_1 ~ year_2, value.var = "name_count")

row_names <- paste("Year1:", contingency_table$year_1)
row.names(contingency_table) <- row_names
contingency_table <- contingency_table[,-1]  

colnames(contingency_table) <- paste("Year2:", colnames(contingency_table))

contingency_table <- as.matrix(contingency_table)

The output looks like this:

            Year2: 2000 Year2: 2001 Year2: 2002 Year2: 2003 Year2: 2004 Year2: 2005 Year2: 2006 Year2: 2007 Year2: 2008 Year2: 2009
Year1: 2000           0           0           1           3           1           1           4           1           3           2
Year1: 2001           3           1           2           5           2           2           1           0           3           2
Year1: 2002           2           2           1           4           3           2           2           0           0           0
Year1: 2003           1           1           1           3           2           1           2           4           2           3
Year1: 2004           3           6           3           1           3           1           1           2           3           1
Year1: 2005           4           4           2           6           3           5           1           1           4           2
Year1: 2006           2           2           2           3           5           0           1           4           2           2
Year1: 2007           1           1           2           4           3           2           1           5           3           4
Year1: 2008           0           5           3           5           2           9           1           3           2           2
Year1: 2009           1           3           1           2           1           3           1           5           2           4

I am wondering : Is it possible to add a single overarching label for the vertical and horizontal dimensions so that there is no repetition?

Thanks!


Solution

  • Here is another approach using kableExtra package:

    1. We use pivot_wider() to widen the data
    2. transform to kable format and
    3. apply kableExtra arguments
    library(tidyr)
    library(kableExtra)
    
    z |> 
      pivot_wider(names_from = "year_2", values_from = name_count) |> 
      kable() |> 
      kable_styling(c("striped")) |>
      add_header_above(c(" ", "year_2" = 21), align = "l")
    

    enter image description here