gpt4 book ai didi

R:将 CrossTable (gmodels) 结果很好地格式化 (html) 到 Markdown 文档中的非繁琐方法

转载 作者:行者123 更新时间:2023-12-02 05:18:18 25 4
gpt4 key购买 nike

下面的代码

---
title: "Example"
output: html_document
---

```{r}
require(datasets)
data(esoph)
require(knitr, quietly = TRUE, warn.conflicts = FALSE)
kable(table(esoph$agegp, esoph$alcgp),
caption = "Some sample")
```

生成这个令人愉快的表格: Table example - kable and table

我更喜欢由 gmodels 包中的 CrossTable 函数生成的结果,在这里我可以非常灵活地引入有趣的摘要:

> CrossTable(esoph$agegp, esoph$alcgp, digits = 1, prop.r = FALSE, prop.t = FALSE, chisq = FALSE,
+ prop.chisq = FALSE)
Cell Contents
|-------------------------|
| N |
| N / Col Total |
|-------------------------|

========================================================
esoph$alcgp
esoph$agegp 0-39g/day 40-79 80-119 120+ Total
--------------------------------------------------------
25-34 4 4 3 4 15
0.2 0.2 0.1 0.2
--------------------------------------------------------
35-44 4 4 4 3 15
0.2 0.2 0.2 0.1
--------------------------------------------------------
45-54 4 4 4 4 16
0.2 0.2 0.2 0.2
--------------------------------------------------------
55-64 4 4 4 4 16
0.2 0.2 0.2 0.2
--------------------------------------------------------
65-74 4 3 4 4 15
0.2 0.1 0.2 0.2
--------------------------------------------------------
75+ 3 4 2 2 11
0.1 0.2 0.1 0.1
--------------------------------------------------------
Total 23 23 21 21 88
0.3 0.3 0.2 0.2
========================================================

我想要实现的是以与使用表格结果相同的方式使用通过CrossTable生成的结果。特别是,我有兴趣将这些结果强制放入 kable 中,以便其格式良好。我通过 StackOverflow 浏览并发现了 Printing cross-tabulations in knitr 上的相关讨论。 或介绍 counts and percentages in xtables 。那里讨论的解决方案似乎很详尽。实际上,我只想将 CrossTable 输出移动到 kable 可以理解重新格式化的对象。

最佳答案

尝试一下pander general S3 method而不是kable:

> pander(CrossTable(esoph$agegp, esoph$alcgp, digits = 1))

------------------------------------------------------------
  0-39g/day 40-79 80-119 120+ Total
------------ ----------- -------- -------- -------- --------
**25-34**\  \  \  \  \  \
N\ 4\ 4\ 3\ 4\ 15\
Row(%)\ 27%\ 27%\ 14%\ 5%\ 17%
Column(%) 27%\ 17%\ 19%\ 3%\
20% 17% 5% 5%

**35-44**\  \  \  \  \  \
N\ 4\ 4\ 4\ 3\ 15\
Row(%)\ 27%\ 20%\ 19%\ 5%\ 17%
Column(%) 27%\ 17%\ 14%\ 5%\
27% 17% 5% 3%

**45-54**\  \  \  \  \  \
N\ 4\ 4\ 4\ 4\ 16\
Row(%)\ 25%\ 25%\ 19%\ 5%\ 18%
Column(%) 25%\ 17%\ 19%\ 5%\
25% 17% 5% 5%

**55-64**\  \  \  \  \  \
N\ 4\ 4\ 4\ 4\ 16\
Row(%)\ 25%\ 25%\ 19%\ 5%\ 18%
Column(%) 25%\ 17%\ 19%\ 5%\
25% 17% 5% 5%

**65-74**\  \  \  \  \  \
N\ 4\ 3\ 4\ 4\ 15\
Row(%)\ 27%\ 27%\ 19%\ 3%\ 17%
Column(%) 20%\ 17%\ 19%\ 5%\
27% 13% 5% 5%

**75+**\  \  \  \  \  \
N\ 3\ 4\ 2\ 2\ 11\
Row(%)\ 27%\ 18%\ 10%\ 5%\ 12%
Column(%) 36%\ 13%\ 10%\ 2%\
18% 17% 3% 2%

Total 23\ 23\ 21\ 21\ 88\
26% 26% 24% 24%
------------------------------------------------------------

虽然它目前不支持抑制行百分比,但您可以使用 CrossTable native 抑制列百分比或总百分比:

> pander(CrossTable(esoph$agegp, esoph$alcgp, digits = 1, prop.c = FALSE, prop.t = FALSE, chisq = FALSE, prop.chisq = FALSE))

------------------------------------------------------------
  0-39g/day 40-79 80-119 120+ Total
------------ ----------- -------- -------- -------- --------
**25-34**\  \  \  \  \  \
N\ 4\ 4\ 3\ 4\ 15\
Row(%) 27% 27% 20% 27% 17%

**35-44**\  \  \  \  \  \
N\ 4\ 4\ 4\ 3\ 15\
Row(%) 27% 27% 27% 20% 17%

**45-54**\  \  \  \  \  \
N\ 4\ 4\ 4\ 4\ 16\
Row(%) 25% 25% 25% 25% 18%

**55-64**\  \  \  \  \  \
N\ 4\ 4\ 4\ 4\ 16\
Row(%) 25% 25% 25% 25% 18%

**65-74**\  \  \  \  \  \
N\ 4\ 3\ 4\ 4\ 15\
Row(%) 27% 20% 27% 27% 17%

**75+**\  \  \  \  \  \
N\ 3\ 4\ 2\ 2\ 11\
Row(%) 27% 36% 18% 18% 12%

Total 23\ 23\ 21\ 21\ 88\
26% 26% 24% 24%
------------------------------------------------------------

关于行百分比支持,请在 related issue 添加评论,我很确定@RomanTsegelskyi 会很乐意解决这个问题。

关于R:将 CrossTable (gmodels) 结果很好地格式化 (html) 到 Markdown 文档中的非繁琐方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27529575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com