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”列中有值?
我对聚合函数进行了一些研究,但仍然找不到解决方案。
请帮忙
我们可以使用 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. 在dplyr和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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3355 次 |
| 最近记录: |