2016-05-11 5 views
1

カテゴリの変数をグループ化して別のグループに集約したい大きなdata.frameがあります。一つの方法は、次のようになります。1つのdata.frameのデータを別のグループにまとめて

cars = mtcars 
carb_grps = data.frame(carb = 1:8, carb_grp = rep(c('Low','Mid','High'), c(2,2,4))) 
cars = merge(cars, carb_grps, by = 'carb') 
aggregate(mpg ~ carb_grp, cars, mean) 
    carb_grp  mpg 
1  High 17.35000 
2  Low 23.61176 
3  Mid 15.90769 

しかし、これは、私はより多くのメモリを絆を推測している大規模なdata.table内のすべてのcarb_grpの詳細を、複製しますか?これを達成するためにRでよりエレガントで効率的な方法があるのだろうか?

答えて

0

これはこれを行う素晴らしい方法だと思います。ここにdplyr相当物があります。

library(dplyr) 

data_frame(carb = 1:8, 
      carb_grp = rep(c('Low','Mid','High'), 
          c(2,2,4))) %>% 
    right_join(mtcars) %>% 
    group_by(carb_grp) %>% 
    summarize(mpg = mean(mpg)) 
+0

ありがとう。 dplyr溶液が好ましく、私はこの例が好きです。しかし、私は、これは私のメソッドと基本的に同じですが、 'carb_grp'データが各データ行ごとに複製される点に注意してください。あなたはRがどのようにこのコラムをフードの下で扱っているのか知っていますか?例えば。 'carb'と' carb_grp'カラムはメモリを最適化するために_factor_クラスである必要がありますか? – geotheory

+0

文字ベクトルがハッシュ(ある種の魔法)に格納されるため、@ファクタベクトルは文字ベクトルと比較してメモリ記憶の点でより効率的ではありません。これはR 2.8以来真実です。この[投稿]を参照してください(http://stackoverflow.com/questions/36507061/what-is-a-good-rule-of-thumb-on-when-to-factorize-columns-in-r/36507363#36507363)詳細はリンクを参照してください。 – lmo

+0

@lmo _factor_は 'object.size'によって返された値に影響を与えるので、混乱します(附属書を参照してください)。私は関数が '推定値'を提供していることに注意してください.. – geotheory

関連する問題