r - 同时按总和聚合一列,按平均值聚合另一列

标签 r aggregate

我想在日期框架上使用聚合函数,但对一列求和并取另一列的平均值。

这是一个示例数据框

Manager   Category  Amount  SqFt
Joe           Rent     150   500
Alice         Rent     250   700
Joe      Utilities      50   500
Alice    Utilities      75   700

我不能做类似下面的事情。有没有简单的方法来做到这一点?
Avg_CPSF=aggregate(cbind(Amount,SqFt)~Manager,data=aaa,FUN=c(sum,mean)

最终我需要
Manager  Amount   SqFT
Joe       200      500
Alice     325      700

这样我就可以通过执行 Amount/SqFT 来计算每平方英尺的成本

最佳答案

有几种方法可以做到这一点。以下是我喜欢的一些(假设我们从 data.frame 开始,名为“mydf”):

使用 aveunique

unique(within(mydf, {
  Amount <- ave(Amount, Manager, FUN = sum)
  SqFt <- ave(SqFt, Manager, FUN = mean)
  rm(Category)
}))
#   Manager Amount SqFt
# 1     Joe    200  500
# 2   Alice    325  700

使用 data.table :
library(data.table)
DT <- data.table(mydf)
DT[, list(Amount = sum(Amount), SqFt = mean(SqFt)), by = "Manager"]
#    Manager Amount SqFt
# 1:     Joe    200  500
# 2:   Alice    325  700

使用“sqldf”:
library(sqldf)
sqldf("select Manager, sum(Amount) `Amount`, 
      avg(SqFt) `SqFt` from mydf group by Manager")

使用 aggregatemerge :
merge(aggregate(Amount ~ Manager, mydf, sum), 
      aggregate(SqFt ~ Manager, mydf, mean))

关于r - 同时按总和聚合一列,按平均值聚合另一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14984589/

相关文章:

r - Plotly Sankey 微调;节点沿 x 轴对齐,下降

r - 将数据帧列表 : not a simple rbind, 第二行转换为新列

r - 在一系列连续值中查找最后一行

r - 从分布的点集创建多边形

r - 将数据框列表转换为具有列表名称的单个数据框

r - 聚合函数在数据框中创建不需要的向量

r - 在创建表中削减值(value)

group-by - pyspark:聚合列中最常见的值

r - 使用 R 中的 par mfrow 在绘图网格中开始新行

r - 一次聚合多列