比较两个数据帧的值 R

Compare Values Across Two Dataframes R

我正在 R 中构建犯罪报告并比较两个单独的数据框,一个来自当年,一个来自前一年。两者的数据结构相同。有没有办法根据前一年犯下的罪行为 flextable 中的值着色?因此,例如,如果 2020 年 1 月的凶杀案多于 2019 年 1 月,则将该值涂成红色。如果 2020 年 1 月的入室盗窃案比 2019 年 1 月少,则用绿色表示价值,以此类推一年中的每个月和每起犯罪。这是数据示例:

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))

我想要的输出是根据 df2019 值对 df2020 值进行着色(我在下面包含了一张图片)。然后我想使用 Officer 包将 table 包含在 Powerpoint 中。

有人有什么想法吗?我一直在探索 kablekableExtraflextable 中的选项,但找不到任何适用于数据帧的解决方案。感谢您的帮助!

这是一个解决方案:

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")