knitr - 两个数据帧并排,在 R-markdown 中交替显示行颜色

knitr - two dataframes side-by-side with alternating row color in R-markdown

在 R-markdown 中,我喜欢像这样显示具有交替行颜色(一灰一白)的数据框

library(kableExtra)

df <- data.frame(col_1 = c(1,2), col_2 = c(2,4))
knitr::kable(df)%>%
  row_spec(seq(1,nrow(df),2), background="#D3D3D3") %>%
  kable_styling(full_width=F)

现在我想并排显示两个数据框。我可以用

完成
df_1 <- df
df_2 <- df
knitr::kable(list(df_1, df_2)) %>%
  kable_styling(full_width=F)

我也想实现交替行颜色,但它不能像以前使用 row_spec 那样工作。有什么解决方法的建议吗?

我们可以使用bind_cols

library(dplyr)
knitr::kable(bind_cols(df_1, df_2) %>% setNames(rep(names(df_1), 2))) %>%
 row_spec(seq(1,nrow(df_1),2), background="#D3D3D3") %>%
  kable_styling(full_width=F)

或转换为 matrixcbind,因为 matrix 可以有重复的列名。对于 data.framemake.unique 将通过向其附加后缀

来修改重复的列名
knitr::kable(cbind(as.matrix(df_1), as.matrix(df_2))) %>%
 row_spec(seq(1, nrow(df), 2),  background="#D3D3D3")
 kable_styling(full_width=FALSE)