为每个类别分配最小值和最大值,而不按类别分组
Posted
技术标签:
【中文标题】为每个类别分配最小值和最大值,而不按类别分组【英文标题】: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
【问题讨论】:
【参考方案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
获取每个组的min
和max
:
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
【讨论】:
以上是关于为每个类别分配最小值和最大值,而不按类别分组的主要内容,如果未能解决你的问题,请参考以下文章