Сравните значения в двух кадрах данных R

Я строю отчет о преступлении в R и сравниваю два отдельных кадра данных, один за текущий год, а другой за предыдущий год. Структура данных одинакова в обоих. Есть ли способ раскрасить значения в гибкой таблице на основе преступлений, совершенных в предыдущем году? Так, например, если в январе 2020 года было больше убийств, чем в январе 2019 года, закрасьте это значение красным цветом. Если в январе 2020 года было меньше краж со взломом, чем в январе 2019 года, закрасьте это значение зеленым цветом, и так далее для каждого месяца года и для каждого преступления. Вот пример данных:

df2019 <- data.frame(crime = c("assault", "homicide", "burglary"),
                 Jan = c(5, 2, 7),
                 Feb = c(2, 4, 0),
                 Mar = c(1, 2, 1))

df2020 <- data.frame(crime = c("assault", "homicide", "burglary"),
                 Jan = c(1, 2, 5),
                 Feb = c(1, 3, 0),
                 Mar = c(2, 2, 1))

Мой желаемый результат состоит в том, чтобы значения df2020 были окрашены на основе значений df2019 (я включил изображение ниже). Затем я хотел бы включить таблицу в Powerpoint, используя пакет Officer.

введите здесь описание изображения

У кого-нибудь есть какие-либо идеи? Я изучал варианты в kable, kableExtra и flextable, но не могу найти решения, которые работают с разными фреймами данных. Спасибо за помощь!


person Logowilliams    schedule 25.11.2020    source источник


Ответы (1)


Вот решение:

library(flextable)
library(magrittr)

df2019 <- data.frame(crime = c("assault", "homicide", "burglary"),
                     Jan = c(5, 2, 7),
                     Feb = c(2, 4, 0),
                     Mar = c(1, 2, 1))

df2020 <- data.frame(crime = c("assault", "homicide", "burglary"),
                     Jan = c(1, 2, 5),
                     Feb = c(1, 3, 0),
                     Mar = c(2, 2, 1))

colors <- unlist(df2020[-1] - df2019[-1]) %>% 
  cut(breaks = c(-Inf, -.1, 0.1, Inf),
      labels = c("green", "transparent", "red")) %>% 
  as.character()

flextable(df2020) %>% 
  bg(j = ~ . -crime, bg = colors) %>% 
  theme_vanilla() %>% 
  autofit() %>% save_as_pptx(path = "test.pptx")

введите здесь описание изображения

person David Gohel    schedule 25.11.2020
comment
Спасибо за быстрый ответ, Давид! Я копирую и вставляю ваше решение, и хотя оно хорошо компилирует данные в гибкую таблицу, цвета не работают с моей стороны. Есть идеи, почему? - person Logowilliams; 26.11.2020
comment
нет. Вы открыли файл в PowerPoint (без LibreOffice или другого текстового редактора)? - person David Gohel; 26.11.2020
comment
Да, я открыл его с помощью powerpoint. Гибкий стол такой же, как у вас, только без цветов. Я скопировал и вставил ваше решение, поэтому мне интересно, почему это происходит - person Logowilliams; 26.11.2020
comment
Похоже, что причина, по которой цвета не отображались, заключалась в theme_vanilla() строке кода. Когда я его вынимаю, он работает отлично! Большое спасибо, Давид! - person Logowilliams; 26.11.2020
comment
Я изменил theme_vanilla, возможно, я изменил белый фон на прозрачный, с последней версией у вас не должно возникнуть проблем. - person David Gohel; 26.11.2020