【问题标题】:Assign min and max value to each Category without grouping by Category为每个类别分配最小值和最大值,而不按类别分组
【发布时间】:2020-10-22 19:24:13
【问题描述】:

假设我有 2 列

Category  Value
A         10
B         4
C         5
A         7
B         2
B         8

我想创建新列 MAX 和 MIN,它们为每个类别分配最小值和最大值,而不将类别分组为一行。

Category  Value  MIN  MAX
A         10      7    10
B         4       2     8    
C         5       5     5
A         7       7    10
B         2       2     8
B         8       2     8

【问题讨论】:

    标签: r dataframe max min


    【解决方案1】:

    使用dplyr,这可以通过使用group_by()后跟mutate()来实现:

    library(dplyr)
    
    df %>%
      group_by(Category) %>%
      mutate(MIN = min(Value),
             MAX = max(Value)) %>%
      ungroup()
    

    给了

      Category Value   MIN   MAX
      <chr>    <dbl> <dbl> <dbl>
    1 A           10     7    10
    2 B            4     2     8
    3 C            5     5     5
    4 A            7     7    10
    5 B            2     2     8
    6 B            8     2     8
    

    输入

    df <- structure(list(Category = c("A", "B", "C", "A", "B", "B"), Value = c(10, 
    4, 5, 7, 2, 8)), class = c("spec_tbl_df", "tbl_df", "tbl", "data.frame"
    ), row.names = c(NA, -6L), spec = structure(list(cols = list(
        Category = structure(list(), class = c("collector_character", 
        "collector")), Value = structure(list(), class = c("collector_double", 
        "collector"))), default = structure(list(), class = c("collector_guess", 
    "collector")), skip = 1), class = "col_spec"))
    

    【讨论】:

      【解决方案2】:

      您可以使用ave 获取每个组的minmax

      df$MIN <- ave(df$Value, df$Category, FUN=min)
      df$MAX <- ave(df$Value, df$Category, FUN=max)
      df
      #  Category Value MIN MAX
      #1        A    10   7  10
      #2        B     4   2   8
      #3        C     5   5   5
      #4        A     7   7  10
      #5        B     2   2   8
      #6        B     8   2   8
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-11-20
        • 2021-08-14
        • 1970-01-01
        • 1970-01-01
        • 2016-08-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多