5

日付フレームで集計関数を使用したいのですが、1つの列を合計し、別の列の平均を取ります。

これがデータフレームの例です

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を実行して、1平方フィートあたりのコストを計算できるようにします。

4

2 に答える 2

20

これを行うにはいくつかの方法があります。これが私が好きなものです(すべてdata.frame「mydf」という名前で始めていると仮定しています):

aveおよびの使用unique

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")

aggregateおよびを使用するmerge

merge(aggregate(Amount ~ Manager, mydf, sum), 
      aggregate(SqFt ~ Manager, mydf, mean))
于 2013-02-20T16:18:51.133 に答える
4

パッケージ内のsummarise関数を使用できます。ddplyplyr

library(plyr)
ddply(mtcars,.(cyl),summarise,TotalWt=sum(wt),AveHP=mean(hp))
  cyl TotalWt     AveHP
1   4  25.143  82.63636
2   6  21.820 122.28571
3   8  55.989 209.21429
于 2013-02-20T16:22:38.780 に答える