【问题标题】:How do I group_by, summarize and then select both the min and max?我如何分组,总结然后选择最小值和最大值?
【发布时间】:2019-06-18 20:02:38
【问题描述】:
         Fx       claim_x
1      0.00       0
2      0.05       0
3      0.06       0
4      0.10       0
5      0.30       0
6      0.35     100
7      0.50     350
8      0.60     350
9      0.70     850
10     0.79    2350
11     0.90    4850
12     1.00    4850

以上是数据框。如果我想 group_by claim_x 并选择 Fx 的最小值,我这样做:

min <- df %>% dplyr::group_by(claim_x) %>% dplyr::summarise(Fx=min(Fx))

如果我想要最大值,我会这样做:

max <- points %>% dplyr::group_by(claim_x) %>% dplyr::summarise(Fx=max(Fx))

问题是,如何在同一列中同时选择最小值和最大值?因此输出应该与输入具有相同的结构,即只有 Fx 和 claim_x 列的数据框。

输出应该是:

# A tibble: 9 x 2
  claim_x    Fx
    <dbl> <dbl>
1       0  0   
2       0  0.3 
3     100  0.35
4     350  0.5 
5     350  0.6 
6     850  0.7 
7    2350  0.79
8    4850  0.9 
9    4850  1  

【问题讨论】:

    标签: r dplyr tidyverse


    【解决方案1】:

    我们可以使用range 并将其作为list 列,然后使用unnest

    df %>%
      group_by(claim_x) %>%
      summarise(Fx = list(range(Fx))) %>%
      unnest %>%
      distinct
    # A tibble: 9 x 2
    #  claim_x    Fx
    #    <int> <dbl>
    #1       0  0   
    #2       0  0.3 
    #3     100  0.35
    #4     350  0.5 
    #5     350  0.6 
    #6     850  0.7 
    #7    2350  0.79
    #8    4850  0.9 
    #9    4850  1   
    

    或使用data.table

    library(data.table)
    unique(setDT(df)[, .(Fx = range(Fx)), by = claim_x])
    

    数据

    df <- structure(list(Fx = c(0, 0.05, 0.06, 0.1, 0.3, 0.35, 0.5, 0.6, 
    0.7, 0.79, 0.9, 1), claim_x = c(0L, 0L, 0L, 0L, 0L, 100L, 350L, 
    350L, 850L, 2350L, 4850L, 4850L)), class = "data.frame", 
    row.names = c("1", 
    "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"))
    

    【讨论】:

    • 但我需要它们都在同一列中
    • @athletic_coder 请检查最后一个,已更新
    猜你喜欢
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 2021-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    相关资源
    最近更新 更多