我必须在 R 中创建摘要统计信息表。该表有4列。数据remittance==0
和remittance==1
中存在变量,其中包括其他变量(将在表中的行中)的特征的均值和SD,如年龄,收入,城市,贫困等等。如何创建这样的表?我找不到任何合适的方法。这是我想要的那种表的一个例子:
Variable remittance==0 remittance==1
mean sd mean sd
age
female
married
income
答案 0 :(得分:2)
要获得所需的格式,可以使用tidyr/dplyr
。经过大量的改造,整理和重新整理......
summary_table = mtcars %>%
group_by(vs) %>%
summarize_all(funs(mean = mean, sd = sd)) %>%
gather("stat", "val", -vs) %>%
mutate(vs = paste0("vs", vs)) %>%
unite(stat, stat, vs, sep = ".") %>%
separate(stat, into = c("var", "stat"), sep = "_") %>%
spread(stat, val) %>%
select(var, mean.vs0, sd.vs0, mean.vs1, sd.vs1) %>%
mutate_if(is.numeric, funs(round(., 3)))
结果tidyr/dplyr
:
# A tibble: 10 x 5
var mean.vs0 sd.vs0 mean.vs1 sd.vs1
<chr> <dbl> <dbl> <dbl> <dbl>
1 am 0.333 0.485 0.500 0.519
2 carb 3.611 1.539 1.786 1.051
3 cyl 7.444 1.149 4.571 0.938
4 disp 307.150 106.765 132.457 56.893
5 drat 3.392 0.474 3.859 0.506
6 gear 3.556 0.856 3.857 0.535
7 hp 189.722 60.282 91.357 24.424
8 mpg 16.617 3.861 24.557 5.379
9 qsec 16.694 1.092 19.334 1.354
10 wt 3.689 0.904 2.611 0.715
您也可以使用stargazer
,但我认为您无法将它们合并:
library(stargazer)
library(dplyr)
mtcars %>%
split(mtcars$vs) %>%
stargazer(type = "text",
summary.stat = c("mean", "sd"),
title = c("vs = 0", "vs = 1"))
结果stargazer
:
vs = 0
==========================
Statistic Mean St. Dev.
--------------------------
mpg 16.617 3.861
cyl 7.444 1.149
disp 307.150 106.765
hp 189.722 60.282
drat 3.392 0.474
wt 3.689 0.904
qsec 16.694 1.092
vs 0.000 0.000
am 0.333 0.485
gear 3.556 0.856
carb 3.611 1.539
--------------------------
vs = 1
==========================
Statistic Mean St. Dev.
--------------------------
mpg 24.557 5.379
cyl 4.571 0.938
disp 132.457 56.893
hp 91.357 24.424
drat 3.859 0.506
wt 2.611 0.715
qsec 19.334 1.354
vs 1.000 0.000
am 0.500 0.519
gear 3.857 0.535
carb 1.786 1.051
--------------------------
备注:强>
tidyr/dplyr
方法的优点是输出是一个数据框,因此您可以对其进行操作并将其用于进一步的计算。您无法使用stargazer
。stargazer
方法的优点是它可以以漂亮的表格格式输出表格。即使在Latex。只需将type = "text"
更改为type = "latex"
即可。如果要在发布中或在rmarkdown文档的pdf输出中包含描述性统计信息,这将非常有用。 当然,您也可以结合使用这两种方法并利用这两种方法:
结果为tidyr/dplyr
+ stargazer
:
> stargazer(summary_table, type = "text", summary = FALSE)
========================================
var mean.vs0 sd.vs0 mean.vs1 sd.vs1
----------------------------------------
1 am 0.333 0.485 0.5 0.519
2 carb 3.611 1.539 1.786 1.051
3 cyl 7.444 1.149 4.571 0.938
4 disp 307.15 106.765 132.457 56.893
5 drat 3.392 0.474 3.859 0.506
6 gear 3.556 0.856 3.857 0.535
7 hp 189.722 60.282 91.357 24.424
8 mpg 16.617 3.861 24.557 5.379
9 qsec 16.694 1.092 19.334 1.354
10 wt 3.689 0.904 2.611 0.715
----------------------------------------
> stargazer(summary_table, type = "latex", summary = FALSE, header = FALSE)
答案 1 :(得分:2)
这在生物医学研究中通常被称为“表1”。有一个方便的R包,称为tableone,可以非常方便地为您提供。如果您发布reproducible example,我可以向您展示它如何处理您的数据。取而代之的是,基本代码将类似于:
library(tableone)
CreateTableOne(data=, vars=c("age","income"), factorVars=c("female","married"),
strata="remittance")
答案 2 :(得分:0)
data(iris)
library(psych)
describeBy(iris[,-5], iris[,5])
只需替换您的数据。