这是数据:
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
我想要这样的事情:
a b max
1 1 3
1 3 3
2 5 9
2 9 9
3 4 4
我的问题:如何通过“a”列计算“最大”列分组,其中“b”列中的值为?
我用聚合函数进行了一些研究,但我仍然找不到解决方案。
请帮忙
答案 0 :(得分:2)
我们可以使用其中一个功能组,它允许创建一个列而不仅仅是summarise
输出。 data.table
选项是succint,因为赋值(:=
)将创建一个新列。我们转换了&#39; data.frame&#39;按&#39; data.table&#39;,按&#39; a&#39;,得到&#39; b&#39;的最大值。 (max(b)
)并指定(:=
)作为新列。如果我们需要摘要,请使用list
代替:=
。
library(data.table)
setDT(df1)[, Max:= max(b), a]
或使用ave
中的base R
。这是罕见的基本函数之一,它将输出与原始数据集的行数相同。作为第一个参数,我们使用变量来获取max
,第2,第3等等(如果有的话)将成为分组列。指定FUN
。默认情况下,如果我们不指定任何FUN
,则按组mean
进行操作。
df1$Max <- with(df1, ave(b, a, FUN=max)
或dplyr
。 dplyr
和data.table
解决方案可以灵活地获取summary
或获取原始数据集的新列。使用dplyr
,在我们按&#39; a&#39;后,使用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