2016-11-01 7 views
0

revenue(int)、quarter(4レベルの係数)、product(3レベルの係数)の3つの列を持つデータフレームdfがあるとします。グループ内のグループの機能R

df <- data.frame(
    revenue = sample(500:5000, 10, replace=TRUE), 
    quarter = sample(c("q1", "q2", "q3", "q4"), 50, replace = TRUE), 
    product = sample(c("book", "movie", "tv"), 50, replace = TRUE)) 

このように、いずれかの四半期または製品によりグループにtapplyを使用して、収益上のさまざまな機能を実行することは非常に容易になります:私は、四半期ごとの売上高の合計を与える

quarterly_revenue <- tapply(df$revenue, df$quarter, sum) 

を。

しかし、これは私の質問です。私はそれをもっと細かくしたいと思っています。すなわち、四半期ごとの各製品の収益の合計?私はsplit関数を試して、データフレームのリストを作成し、様々なplyrソリューションを使用しましたが、私が探している出力はありません。私はそれぞれの要素に基づいてサブセット化することができると知っていますが、それは効率的ではありません。特に、私が実際に作業しているセットには、より多くの因子レベルがあります。

任意のアイデア?助けてくれてありがとう!

+0

=リストによって '集計(DFの$収入、(DF $ quarter、df $ product)、sum) ' – MFR

答えて

0

我々はそれがaggregate

aggregate(revenue~., df, sum) 

またはdplyrまたはdata.table

library(dplyr) 
df %>% 
    group_by(quarter, product) %>% 
    summarise(Sum = sum(revenue)) 
でずっと容易になるだろう listにグループ化列を配置し、 sum

tapply(df$revenue, list(df$quarter, df$product), sum) 

を取得

0

あなたはbyパラメータでdata.tableを使用することができます。

library(data.table) 
setDT(df)[ , quarterly_revenue := sum(revenue), 
       by = .(quarter, product) ] 

または、(だけではなく、列を追加する)要約する:

library(data.table) 
library(magrittr) 

setDT(df)[ , sum(revenue), 
       by = .(quarter, product) ] %>% 
    setnames(c("quarter", "product", "quarterly_revenue")) 
関連する問題