gpt4 book ai didi

r - 使用 dplyr 创建多功能描述表

转载 作者:行者123 更新时间:2023-12-04 14:31:17 26 4
gpt4 key购买 nike

我正在尝试创建一个简单的代码,我可以一遍又一遍地重用(进行最少的调整),以便能够打印汇总统计表。
一个可重现的示例为变量 V1 创建了一个包含 M 和 SD 的表按组划分:

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。
我希望能够替换对 V1 的调用类似 vars这只是我数据集中所有变量的列表;在这个例子中,V1 和 V2。但通常我有 100 个变量。
我希望它以这种方式工作的原因是,我可以做一些非常简单的事情,例如:
vars <- names(data[3:4])
并非常快速地选择我想要汇总统计的列。
我的愿望 list 有几点:
给定变量的 M 和 SD 应该彼此相邻,我想在每对上方添加一列带有变量名称的列。
我希望最终产品看起来像
this example table
我想使用 dplyr,但我愿意接受其他选择。
我还想了解如何切换表格的行和列,以便变量位于不同的行上,并且每个组都有一列(或两列,一列用于 M,另一列用于 SD)。像这样:
another example table
关闭,但没有雪茄:
  • newish summarise(across()) 有点帮助:
  • dplyr::group_by(df, Group) %>% 
    dplyr::summarise(dplyr::across(.cols = c(V1, V2), .fns = c(mean, sd)))
    但我不知道如何在不制作多个表和使用的情况下进行缩放 rbind()堆叠它们。
  • 我真的很喜欢 table1() 的格式( vignette ),但据我所知,我只能通过另一个变量对列 M/SD 进行分层。我真的希望我可以添加额外的分组变量。
  • 最佳答案

    排序有限制,但如果我们使用 select ,然后可以对列名上的子字符串重新排序

    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

    关于r - 使用 dplyr 创建多功能描述表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60553270/

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