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

时间:2016-02-25 03:28:20

标签: 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

我想要这样的事情:

a b max
1 1 3
1 3 3
2 5 9
2 9 9
3 4 4

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

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

请帮忙

1 个答案:

答案 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)

dplyrdplyrdata.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