R 组按聚合

标签 r group-by aggregate

在 R(我相对较新)中,我有一个数据框,其中包含许多列和一个数字列,我需要根据另一列确定的组进行聚合。

 SessionID   Price
 '1',       '624.99'
 '1',       '697.99'
 '1',       '649.00'
 '7',       '779.00'
 '7',       '710.00'
 '7',       '2679.50'

我需要按 SessionID 分组并返回每个 ONTO 原始数据帧的最大值和最小值,例如:

 SessionID   Price     Min     Max
 '1',       '624.99'   624.99  697.99
 '1',       '697.99'   624.99  697.99
 '1',       '649.00'   624.99  697.99
 '7',       '779.00'   710.00  2679.50
 '7',       '710.00'   710.00  2679.50
 '7',       '2679.50'  710.00  2679.50

有什么想法可以有效地做到这一点吗?

最佳答案

使用基础 R:

df <- transform(df, Min = ave(Price, SessionID, FUN = min),
                    Max = ave(Price, SessionID, FUN = max))
df
#  SessionID   Price    Min     Max
#1         1  624.99 624.99  697.99
#2         1  697.99 624.99  697.99
#3         1  649.00 624.99  697.99
#4         7  779.00 710.00 2679.50
#5         7  710.00 710.00 2679.50
#6         7 2679.50 710.00 2679.50

由于您想要的结果不是聚合的,而只是带有两个额外列的原始数据,因此您希望在 base R 中使用 ave 而不是 aggregate,您通常会这样做如果您想通过 SessionID 来聚合数据,请使用。 (注意:AEBilgrau 表明您也可以使用带有一些额外匹配的聚合来做到这一点。)

同样,对于 dplyr,您希望使用 mutate 而不是 summarise,因为您不想聚合/汇总数据。

使用 dplyr:

library(dplyr)
df <- df %>% group_by(SessionID) %>% mutate(Min = min(Price), Max = max(Price))

关于R 组按聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27920295/

相关文章:

python pandas 将数据帧乘以向量化方式中随类别变化的权重

sqlite - sql查询 - 如何在组内应用限制

r - 线性插值时间序列中的缺失值

MySQL Group By自定义时间戳

r - 如何用另一个数据框中的信息替换数据框的行名称?

R: Sum Complete.cases in a column 按另一列中的值分组(或排序)

ruby - 在 datamapper (ruby) 中使用 SQL 函数作为字段分组

timestamp - 如何使用couchdb对日期范围内的 View 值求和?

r - Complete.cases() 和 data[is.na(data)] <- 0 的结果有何不同?

javascript - shinyBS 中的动态弹出窗口或工具提示