2017-01-26 20 views
0

私は現在、複数の購入を含む大規模な顧客購入データセットを扱っています。(顧客)データの集計R

お客様が毎年購入したかどうかを確認することにのみ関心があるため、これらの購入を顧客レベルで集約する効率的な方法を探しています。

最終結果は、各行が一意の顧客を表す表として多少見えるはずです。私は、彼が特定の年に買ったかどうかを示す真偽変数を表示しています。簡単な例:私はこのことで作成しようとした

Result example

Customer id Bought 2014 Bought 2015 
1   TRUE  TRUE 
2   TRUE  FALSE 

Raw data example

Customer id Product id year 
1   1   2014 
2   2   2014 
1   3   2015 

結果はのようになります。

生データに似ていますfor - ifループを使用して作成するしかし、これは巨大な実行時間を持っているように見えます。このため、使用しているデータセットのサイズでは使用できなくなります。 また、for-ifループを使用する場合、私は 'FUN ='ステートメントとして何を使用するのか不明なため、顧客レベルでデータを集計するのに苦労しています。これはdplyrを使用して怒鳴る

+0

多分 'table'; '(df、table(customerID、year)> 0)'を使って '。 – lmo

答えて

0

ケビンはコードを試してみてください。

#create your data.frame 
test <- data.frame(cus=c(1,2,1),prod=c(1,2,3),year=c(2014,2014,2015)) 

summary <- test %>% 
    group_by(cus) %>% 
    summarise(bought.2014 = any(year==2014), 
      bought.2015 = any(year==2015) 
) 
1

はここにあなたの生データで長年の任意の数に対応する必要があり、別のdplyrtidyrアプローチです。

library(dplyr) 
library(tidyr) 

df %>% 
    group_by(customer_id) %>% 
    gather(variable, value, year) %>% 
    spread(value, variable) %>% 
    summarize_each(funs(as.logical(sum(!is.na(.)))), -customer_id, -product_id) 
関連する問題