Сравнение значений между двумя фреймами данных R

#r #kable #kableextra #flextable #officer

#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 , но не могу найти никаких решений, которые работали бы во фреймах данных. Спасибо за помощь!

Ответ №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")

 

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

Комментарии:

1. Спасибо за ваш быстрый ответ, Дэвид! Я скопировал и вставил ваше решение, и хотя оно прекрасно компилирует данные в гибкой таблице, цвета не работают с моей стороны. Есть идеи, почему?

2. нет. Вы открывали файл с помощью PowerPoint (без LibreOffice или другого текстового редактора)?

3. Да, я открыл его с помощью PowerPoint. Гибкая таблица такая же, как у вас, только без цветов. Я скопировал и вставил ваше решение, поэтому мне интересно, почему это происходит

4. Похоже, причиной, по которой цвета не отображались, была theme_vanilla() строка кода. Когда я вынимаю это, он работает отлично! Большое тебе спасибо, Дэвид!

5. Я изменил theme_vanilla, возможно, я изменил белый фон на прозрачный фон, с последней версией у вас не должно возникнуть проблем