#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, возможно, я изменил белый фон на прозрачный фон, с последней версией у вас не должно возникнуть проблем