将最大值添加到 R 中的新列

1 r

这是数据:

a <- c(1,1,2,2,3)  
b <- c(1,3,5,9,4)
df1 <- data.frame(a,b)
df1

a b
1 1
1 3
2 5
2 9
3 4
Run Code Online (Sandbox Code Playgroud)

我想要这样的东西:

a b max
1 1 3
1 3 3
2 5 9
2 9 9
3 4 4
Run Code Online (Sandbox Code Playgroud)

我的问题:如何计算“a”列的“最大”列分组,“b”列中有值?

我对聚合函数进行了一些研究,但仍然找不到解决方案。

请帮忙

akr*_*run 5

我们可以使用 group by 函数之一,它允许创建一列而不仅仅是summarise输出。该data.table选项很简洁,因为赋值 ( :=) 将创建一个新列。我们将'data.frame'转换为'data.table',按'a'分组,取'b'的最大值( max(b))并赋值( :=)作为新列。如果我们需要摘要,请用list而不是将其包装起来:=

library(data.table)
setDT(df1)[, Max:= max(b), a]
Run Code Online (Sandbox Code Playgroud)

或使用ave来自base R. 这是罕见的基函数之一,它将输出与原始数据集的行数相同的长度。作为第一个参数,我们使用变量来获取max第 2、第 3 等(如果有)将是分组列。指定FUN. 默认情况下,如果我们不指定 any FUN,它将采用meanby 组。

df1$Max <- with(df1, ave(b, a, FUN=max)
Run Code Online (Sandbox Code Playgroud)

或与dplyr. 在dplyrdata.table解决方案的方式来获得无论是灵活的summary或原始数据集得到一个新列。使用dplyr,在我们按 'a' 分组后,用于mutate创建一个新列。相反,如果我们需要一个汇总版本,则该summarise函数可以替换mutate(这将提供与 类似的输出aggregate)。

library(dplyr)
df1 %>%
   group_by(a) %>%
   mutate(Max = max(b))
#      a     b   Max
#   (dbl) (dbl) (dbl)
#1     1     1     3
#2     1     3     3
#3     2     5     9
#4     2     9     9
#5     3     4     4
Run Code Online (Sandbox Code Playgroud)