首页 > 解决方案 > 为每个类别分配最小值和最大值,而不按类别分组

问题描述

假设我有 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

标签: rdataframemaxmin

解决方案


使用dplyr,这可以通过使用 agroup_by()后跟 a来实现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"))

推荐阅读