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世界的专家。你能指引我吗