R 从多个变量';结果的频率和比例

R 从多个变量';结果的频率和比例,r,rbind,cbind,R,Rbind,Cbind,我一直在想,是否可以从多个变量的频率和比例值创建一个表(即手稿中通常使用的表) 我一直在用这个数据集和代码进行试验: data("mtcars") head(mtcars) mpg cyl disp hp drat wt qsec vs am gear carb Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 Mazda RX4 Wag

我一直在想,是否可以从多个变量的频率和比例值创建一个表(即手稿中通常使用的表)

我一直在用这个数据集和代码进行试验:

data("mtcars")
head(mtcars)

                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1

attach(mtcars)
现在,我正在使用此数据集的分类变量创建一些表。首先,我使用
mtcars
dataset的
am
变量

t1 = table (am)
t1

am
0   1
19  13

p1 = round(prop.table(t1),3)*100
p1

am
   0     1
59.4  40.6
类似地,我正在创建一些表格,其中包含频率和比例以及其他变量,即
vs
gear
carb
。 以下是代码:

t2 = table(vs)
t2
p2 = round(prop.table(t2),3)*100
p2

t3 = table(gear)
t3
p3 = round(prop.table(t3),3)*100
p3

t4 = table(carb)
t4
p4 = round(prop.table(t4),3)*100
p4
现在我想从R创建一个类似表格的输出,如下图所示:

我使用上述代码中的值得出的实际结果如下所示:

我已经尝试了
rbind()
cbind()
函数。但无法管理正确的代码。
非常感谢您的帮助。

如果您不介意使用其他软件包,您可以查看
summarytools
()

下面是一个示例(通常呈现为html,但为了演示,我保存了一个PNG图像):

SuppressPackageStatupMessages(不可见)(
lapply(c(“总结工具”、“dplyr”、“kableExtra”),
require,character.only=TRUE)))
dfs%
mutate(`Stats/Values`=NULL)#%>%view()以查看html输出
将(dfs,方法='render')%%>%打印为_image(file=“out1.png”)
由(v0.3.0)于2020-08-04创建

编辑

如果您坚持构建自己的表(并可能将它们导出到Word),那么建议的表有一个问题:在R中,列只能有一个类,因此您必须至少将“variable”列强制为字符。这也会影响对齐,看起来不那么漂亮

rbind
还有一个问题-列名必须匹配

虽然有几种方法可以解决这些问题,但采用不同的方法可能更容易

有几个软件包允许您生成html表格,例如
flextable
huxtable
kableExtra
,但是,您必须在以后将它们组合起来,例如使用Rmarkdown或逐个复制它们并粘贴到Word中,这样可以保持格式

下面是一种可能的方法,使用Rmarkdown。您必须将下面的代码保存为Rmd文件,然后编织它,这在Rstudio中很容易找到(只需打开Rmd文件并按下
knit
按钮)。 这将在与Rmd文件相同的目录中生成一个html文件,Rmd文件包含您的表

---
  output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
```

```{r results='asis', echo=FALSE}
suppressPackageStartupMessages(invisible(
  lapply(c("dplyr", "knitr", "kableExtra"),
         require, character.only = TRUE)))

makeTable <- function(x, df=mtcars){
  df %>%
    count(!!enquo(x)) %>%
    mutate(prop = scales::percent(prop.table(n/n()), accuracy = .01))
}

# generate the individual data.frames
res <- list(makeTable(am), 
            makeTable(vs),
            makeTable(gear), 
            makeTable(carb))

for (i in res) {
  print(kable_styling(
    kable(i, format = "html", align = "c", row.names = FALSE), 
    full_width = FALSE))
}
```

---
输出:html\u文档
---
```{r设置,include=FALSE}
knitr::opts_chunk$set(echo=FALSE)
```
```{r results='asis',echo=FALSE}
SuppressPackageStatupMessages(不可见)(
lapply(c(“dplyr”、“knitr”、“kableExtra”),
require,character.only=TRUE)))
可制造百分比
计数(!!enquo(x))%>%
变异(属性=比例::百分比(属性表(n/n()),精度=.01))
}
#生成单个数据帧

res如果您不介意使用其他软件包,可以查看
summarytools
()

下面是一个示例(通常呈现为html,但为了演示,我保存了一个PNG图像):

SuppressPackageStatupMessages(不可见)(
lapply(c(“总结工具”、“dplyr”、“kableExtra”),
require,character.only=TRUE)))
dfs%
mutate(`Stats/Values`=NULL)#%>%view()以查看html输出
将(dfs,方法='render')%%>%打印为_image(file=“out1.png”)
由(v0.3.0)于2020-08-04创建

编辑

如果您坚持构建自己的表(并可能将它们导出到Word),那么建议的表有一个问题:在R中,列只能有一个类,因此您必须至少将“variable”列强制为字符。这也会影响对齐,看起来不那么漂亮

rbind
还有一个问题-列名必须匹配

虽然有几种方法可以解决这些问题,但采用不同的方法可能更容易

有几个软件包允许您生成html表格,例如
flextable
huxtable
kableExtra
,但是,您必须在以后将它们组合起来,例如使用Rmarkdown或逐个复制它们并粘贴到Word中,这样可以保持格式

下面是一种可能的方法,使用Rmarkdown。您必须将下面的代码保存为Rmd文件,然后编织它,这在Rstudio中很容易找到(只需打开Rmd文件并按下
knit
按钮)。 这将在与Rmd文件相同的目录中生成一个html文件,Rmd文件包含您的表

---
  output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
```

```{r results='asis', echo=FALSE}
suppressPackageStartupMessages(invisible(
  lapply(c("dplyr", "knitr", "kableExtra"),
         require, character.only = TRUE)))

makeTable <- function(x, df=mtcars){
  df %>%
    count(!!enquo(x)) %>%
    mutate(prop = scales::percent(prop.table(n/n()), accuracy = .01))
}

# generate the individual data.frames
res <- list(makeTable(am), 
            makeTable(vs),
            makeTable(gear), 
            makeTable(carb))

for (i in res) {
  print(kable_styling(
    kable(i, format = "html", align = "c", row.names = FALSE), 
    full_width = FALSE))
}
```

---
输出:html\u文档
---
```{r设置,include=FALSE}
knitr::opts_chunk$set(echo=FALSE)
```
```{r results='asis',echo=FALSE}
SuppressPackageStatupMessages(不可见)(
lapply(c(“dplyr”、“knitr”、“kableExtra”),
require,character.only=TRUE)))
可制造百分比
计数(!!enquo(x))%>%
变异(属性=比例::百分比(属性表(n/n()),精度=.01))
}
#生成单个数据帧

res@user63230感谢您提及此软件包。如果我尝试分析2x2表,这将非常方便。但是,我找不到任何代码,从中我可以创建我想要的表(在我的问题图片中提到)。我不是R世界的专家。你能给我介绍一下吗?@user63230谢谢你提到这个包裹。如果我尝试分析2x2表,这将非常方便。但是,我找不到任何代码,从中我可以创建我想要的表(在我的问题图片中提到)。我不是R世界的专家。你能指引我吗