为每个类别分配最小值和最大值而不按类别分组
Assign min and max value to each Category without grouping by Category
假设我有 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
使用 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"))
您可以使用 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
假设我有 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
使用 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"))
您可以使用 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