gpt4 book ai didi

r - 同时为 dplyr 中的分组值导出唯一值和汇总值的有效方法

转载 作者:行者123 更新时间:2023-12-04 11:58:24 25 4
gpt4 key购买 nike

我有兴趣找到一种有效的方式来获取包含以下内容的组表摘要:

  • 计算每个组的唯一值
  • 选定变量的一组原始描述统计

  • 例如,在生成描述性统计数据的情况下,我使用以下代码:
    data("mtcars")
    require(dplyr)
    mt_sum <- mtcars %>%
    group_by(cyl) %>%
    summarise_each(funs(min,max), hp, wt, disp)

    这将生成所需的输出:
    > head(mt_sum)

    Source: local data frame [3 x 7]

    cyl hp_min wt_min disp_min hp_max wt_max disp_max
    (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl)
    1 4 52 1.513 71.1 113 3.190 146.7
    2 6 105 2.620 145.0 175 3.460 258.0
    3 8 150 3.170 275.8 335 5.424 472.0

    我有兴趣用反射(reflect)每组值计数的数字来丰富数据。关于计数,这可以简单地完成:
    mt_sum2 <- mtcars %>% 
    group_by(cyl) %>%
    summarise(countObs = n())

    这将生成所需的数据:
    > head(mt_sum2)
    Source: local data frame [3 x 2]

    cyl countObs
    (dbl) (int)
    1 4 11
    2 6 7
    3 8 14

    问题

    当我想同时应用两种转换时会出现问题。

    尝试 1

    例如代码:
    mt_sum <- mtcars %>% 
    group_by(cyl) %>%
    summarise_each(funs(min,max), hp, wt, disp) %>%
    summarise(countObs = n())

    会产生:
    Source: local data frame [3 x 2]

    cyl countObs
    (dbl) (int)
    1 4 11
    2 6 7
    3 8 14

    没有之前生成的描述性统计数据。

    尝试 2

    编码:
    mt_sum <- mtcars %>% 
    group_by(cyl) %>%
    summarise_each(funs(min,max,n), hp, wt, disp)

    预计会失败:

    Error: n does not take arguments



    尝试 3(工作)

    编码:
    data("mtcars")
    require(dplyr)
    mt_sum <- mtcars %>%
    group_by(cyl) %>%
    summarise_each(funs(min,max), hp, wt, disp) %>%
    left_join(y = data.frame(
    "Var1" = as.numeric(as.character(as.data.frame(table(mtcars$cyl))$Var1)),
    "Count" = as.character(as.data.frame(table(mtcars$cyl))$Freq)),
    by = c("cyl" = "Var1"))

    将提供所需的数据:
    > head(mt_sum)
    Source: local data frame [3 x 8]

    cyl hp_min wt_min disp_min hp_max wt_max disp_max Count
    (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (fctr)
    1 4 52 1.513 71.1 113 3.190 146.7 11
    2 6 105 2.620 145.0 175 3.460 258.0 7
    3 8 150 3.170 275.8 335 5.424 472.0 14

    我认为这是生成此摘要的极其低效的方式。特别是,在处理大表时,动态创建对象效率低下。我对实现相同的结果很感兴趣,但以更有效的方式实现,而不是为了合并而创建对象。特别是我想在 dplyr中做什么将对应于从表格的先前版本中导出附加摘要。例如:
  • 产生描述性统计
  • 回来后的数据
  • 生成一些额外的统计数据并添加到最终数据
  • 最佳答案

    这是使用 left_join 的另一个(较短)选项:

    mtcars %>% 
    group_by(cyl) %>%
    summarise_each(funs(min,max), hp, wt, disp) %>%
    left_join(count(mtcars, cyl))
    #Joining by: "cyl"
    #Source: local data frame [3 x 8]
    #
    # cyl hp_min wt_min disp_min hp_max wt_max disp_max n
    # (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (int)
    #1 4 52 1.513 71.1 113 3.190 146.7 11
    #2 6 105 2.620 145.0 175 3.460 258.0 7
    #3 8 150 3.170 275.8 335 5.424 472.0 14

    关于r - 同时为 dplyr 中的分组值导出唯一值和汇总值的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34133914/

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