关于r:使用dplyr创建通用的描述性表

Creating a versatile descriptives table using dplyr

我正在尝试创建一个简单的代码,我可以反复使用它(以最小的调整),以便能够打印汇总统计信息表格。

一个可重现的示例为按组细分的变量V1创建一个具有M和SD的表。

1
2
3
4
5
6
7
8
9
10
11
12
data <- as.data.frame(cbind(1:100, sample(1:2), rnorm(100), rnorm(100)))
names(data) <- c("ID","Group","V1","V2")


library(dplyr)
descriptives <- data %>% group_by(Group) %>%
  summarize(
    Mean = mean(V2)
    , SD = sd(V2)
  )

descriptives

我想修改此函数,以便它将为我的数据集中的所有变量计算M和SD。

我希望能够用vars之类的东西替换对V1的调用,这只是我数据集中所有变量的列表;在此示例中,V1和V2。但是通常我有100个变量。
我希望它以这种方式工作的原因是,我可以很容易地做一些事情,例如:

1
vars <- names(data[3:4])

,并很快选择我要摘要统计的列。

我的愿望清单中的一些事项:

给定变量的M和SD应该彼此相邻,我想在每对变量的上方添加一列,并带有变量名。

我希望最终产品看起来像

this

我想使用dplyr,但我愿意接受其他选择。
我还想学习如何切换表的行和列,以便变量位于单独的行上,并且每个组都有一列(或两列,一列用于M,一列用于SD)。


排序有限制,但是如果我们使用select,则可以在列名称的子字符串上重新排序

1
2
3
4
5
6
7
8
9
10
11
library(dplyr)
library(stringr)
data %>%
    group_by(Group) %>%
    summarise_at(vars(vars), list(Mean = mean, SD = sd)) %>%
    select(Group, order(str_remove(names(.)[-1],"_.*")) + 1)
# A tibble: 2 x 5
#  Group V1_Mean V1_SD  V2_Mean V2_SD
#  <dbl>   <dbl> <dbl>    <dbl> <dbl>
#1     1   0.165 0.915  0.146   1.16
#2     2   0.308 1.31  -0.00711 0.854