1

ヒートマップ マッピングが簡単なテーブルに集計したい 2 つの要素列を含むテーブルがあります。

このテーブルには、たとえば次の形式があります

 City         Date           Revenue     Costs       Manager 
 ____         ____            _______    ______       ___
 New York     Feb 1           2000        200        Stuart
 San Fran     Feb 3           1200        300        John
 Boston       Feb 1           1500        400        Mike
 Boston       Feb 1           1300        200        Cissy

など

この形式の収益別の 2-D 集計テーブルが必要です

Sum Revenue  New York     San Fran     Boston   
 ____         ____           ____       ____
 Feb 1        2000             0        2800
 Feb 2          0              0          0
 Feb 3          0             1200        0  

これを行う簡単な方法はありますか、またはループを使用して立ち往生していますか?

4

1 に答える 1

3

コメントで@Arunが示唆しているように、reshapeこれを行います。

d<-read.table(text='City         Date           Revenue     Costs
"New York"     "Feb 1"           2000        200
"San Fran"     "Feb 3"           1200        300
Boston       "Feb 1"           1500        400', header=TRUE)
reshape(d[! names(d) %in% 'Costs'], idvar='Date', timevar='City', direction='wide')
#    Date Revenue.New York Revenue.San Fran Revenue.Boston
# 1 Feb 1             2000               NA           1500
# 2 Feb 3               NA             1200             NA

最初に結合したい都市/日付のエントリが複数ある場合は、 を使用できますaggregate

d<-read.table(text='City         Date           Revenue     Costs
"New York"     "Feb 1"           2000        200
"New York"     "Feb 1"           1000        100
"San Fran"     "Feb 3"           1200        300
Boston       "Feb 1"           1500        400', header=TRUE)
dd<-with(d, aggregate(Revenue, by=list(City=City, Date=Date), sum))
#     City     Date  x
# 1   Boston   Feb 1 1500
# 2 New York   Feb 1 3000
# 3 San Fran   Feb 3 1200
ddd<-reshape(dd, idvar='Date', timevar='City', direction='wide')
#    Date x.Boston x.New York x.San Fran
# 1 Feb 1     1500       3000         NA
# 3 Feb 3       NA         NA       1200

NA次に、 s を に置き換え0ます。

ddd[is.na(ddd)] <- 0
#    Date x.Boston x.New York x.San Fran
# 1 Feb 1     1500       3000          0
# 3 Feb 3        0          0       1200

@Arun が以下に示すポイントに対処するために、前のステップの前に、merge関数を使用して欠落している Date を埋めることができます。

missing.Dates <- c('Feb 2')
ddd<-merge(ddd, data.frame(Date=missing.Dates), by='Date', all=TRUE)
#   Date x.Boston x.New York x.San Fran
#1 Feb 1     1500       3000         NA
#2 Feb 3       NA         NA       1200
#3 Feb 2       NA         NA         NA
ddd[is.na(ddd)] <- 0
#    Date x.Boston x.New York x.San Fran
# 1 Feb 1     1500       3000          0
# 2 Feb 3        0          0       1200
# 3 Feb 2        0          0          0
于 2013-03-22T13:57:10.410 に答える