【问题标题】:Summarise variables and add the result to the existing data frame汇总变量并将结果添加到现有数据框中
【发布时间】:2018-10-13 10:01:21
【问题描述】:

我需要按“id_group”分组并找到中间价,然后将其添加到现有的df中。

summarise 将帮助我们找到group_by 之后的中位价格,但是如何将这个新变量添加到现有的 df 中? mutate 也可能无济于事,因为它不会 summarise 而是不断重复分组变量的条目。

我也试过ave(),但没有帮助。还有其他解决方案吗?

现有数据框

1. id  group  value1 value2
    1.   a      10       1.2 
    2.   a      20       1.3
    3.   b      100      5.1 
    4.   b      200      5.4

需要输出:

 1. id  group  value  grp.median.values1 grp.median.values2 
    1.   a      10     10                  1.2
    2.   b      100    100                 5.1

【问题讨论】:

    标签: r


    【解决方案1】:

    在原始值之后改变中位数没有意义。 summarise() 的想法是将许多值折叠到它们的代表。

    您的最终输出示例只为每个组打印一个值(a 中的第一个 value1 和第一个 value2 / value1 中的第一个 value2b 中的第一个 value2)。
    我认为这没有任何意义。

    将许多值合并为一个摘要 (summarise())。

    [http://r4ds.had.co.nz/transform.html#introduction-2][1]

    我想你已经知道怎么做了:

    library(tidyverse)
    
    df <-
      tribble(
        ~id, ~group, ~value1, ~value2,
        "1.", "a", 10, 1.2,
        "2.", "a", 20, 1.3,
        "3.", "b", 100, 5.1,
        "4.", "b", 200, 5.4,
      )
    
    df %>%
      group_by(group) %>%
      summarise_if(is.numeric, median)
    
    ## # A tibble: 2 x 3
    ##   group value1 value2
    ##   <chr>  <dbl>  <dbl>
    ## 1 a         15   1.25
    ## 2 b        150   5.25
    

    【讨论】:

    • 感谢您的快速回复,但这不是我想要做的。是的,我确实使用了 groupby() %>% summarise,但这会创建一个新的 var/view。我需要同一个 DF 中的中位数。另外,我只想打印 1 个值,因为我只需要显示组的中位数。所以假设我想按邮政编码分组数据并在那里显示房价的中位数。
    • 你提供的真的是你想要的??我认为这只是slice()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    • 2018-11-13
    • 2022-11-17
    • 1970-01-01
    相关资源
    最近更新 更多