这是数据:
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”列中的值分组的“max”列?
我对聚合函数做了一些研究,但仍然找不到解决方案。
请帮忙
我们可以使用 group by 函数之一,它允许创建一列,而不仅仅是summarise
输出。这data.table
选项与作业一样简洁(:=
)将创建一个新列。我们将'data.frame'转换为'data.table',按'a'分组,得到'b'的最大值(max(b)
) 并赋值 (:=
)作为一个新列。如果我们需要摘要,请将其包装起来list
代替:=
.
library(data.table)
setDT(df1)[, Max:= max(b), a]
or use ave
from base R
。这是罕见的基本函数之一,它将输出与原始数据集的行数相同的长度。作为第一个参数,我们使用变量来获取max
of、2nd、3rd 等(如果有)将是分组列。指定FUN
。默认情况下,如果我们不指定任何FUN
,它将需要mean
按组。
df1$Max <- with(df1, ave(b, a, FUN=max)
or with dplyr
. The dplyr
and data.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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)