比较两个数据帧的值 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 中。
有人有什么想法吗?我一直在探索 kable
、kableExtra
和 flextable
中的选项,但找不到任何适用于数据帧的解决方案。感谢您的帮助!
这是一个解决方案:
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")
我正在 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 中。
有人有什么想法吗?我一直在探索 kable
、kableExtra
和 flextable
中的选项,但找不到任何适用于数据帧的解决方案。感谢您的帮助!
这是一个解决方案:
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")