0

重複の可能性:
ID で列を集計する変数を作成するより高速な方法

プロジェクトで困っています。データフレーム (dat と呼ばれる) を長い形式で作成し (以下の最初の 3 行をコピーしました)、たとえば、2000 年から 2011 年までの米国のすべての銀行の税引前収入の平均を計算したいと考えています。それを行う?R の経験はほとんどありません。答えが明白すぎる場合は申し訳ありませんが、何も見つけることができず、すでにプロジェクトに多くの時間を費やしています。前もって感謝します!

KeyItem     Bank    Country Year    Value  
1   Pretax Income   WELLS_FARGO_&_COMPANY   UNITED STATES   2011    2.365600e+10                            
2   Total Assets    WELLS_FARGO_&_COMPANY   UNITED STATES   2011    1.313867e+12                            
3   Total Liabilities   WELLS_FARGO_&_COMPANY   UNITED STATES 2011  1.172180e+12                            
4

1 に答える 1

1

次の手順で開始できます。基本的に、サブセットと集計の 2 つのことを行う必要があります。ベース R ソリューションとソリューションを示しますdata.table

まずはサンプルデータ。

set.seed(1) # So you can reproduce my results
dat <- data.frame(KeyItem = rep(c("Pretax", "TotalAssets", "TotalLiabilities"), 
                                times = 30),
                  Bank = rep(c("WellsFargo", "BankOfAmerica", "ICICI"), 
                             each = 30),
                  Country = rep(c("UnitedStates", "India"), times = c(60, 30)),
                  Year = rep(c(2000:2009), each = 3, times = 3),
                  Value = runif(90, min=300, max=600))

2001 年から 2005 年までの「国」と「年」による「課税前」の値の平均を集計してみましょう。

aggregate(Value ~ Country + Year, 
          dat[dat$KeyItem == "Pretax" & dat$Year >= 2001 & dat$Year <=2005, ], 
          mean)
#         Country Year    Value
# 1         India 2001 399.7184
# 2  UnitedStates 2001 464.1638
# 3         India 2002 443.5636
# 4  UnitedStates 2002 560.8373
# 5         India 2003 562.5964
# 6  UnitedStates 2003 370.9591
# 7         India 2004 404.0050
# 8  UnitedStates 2004 520.4933
# 9         India 2005 567.6595
# 10 UnitedStates 2005 493.0583

ここに同じものがありますdata.table

library(data.table)
DT <- data.table(dat, key = "Country,Bank,Year")
subset(DT, KeyItem == "Pretax")[Year %between% c(2001, 2005), 
    mean(Value), by = list(Country, Year)]
#          Country Year       V1
#  1:        India 2001 399.7184
#  2:        India 2002 443.5636
#  3:        India 2003 562.5964
#  4:        India 2004 404.0050
#  5:        India 2005 567.6595
#  6: UnitedStates 2001 464.1638
#  7: UnitedStates 2002 560.8373
#  8: UnitedStates 2003 370.9591
#  9: UnitedStates 2004 520.4933
# 10: UnitedStates 2005 493.0583
于 2012-11-02T12:15:06.857 に答える