2017-07-17 27 views
1

我有5列的數據集:透視使用多列

store_id year event item units 
123   2015  sale_2 abc  2 
234   2015  sale_3 def  1 
345   2015  sale_2 xyz  5 

我試圖通過store_id, year, and event旋轉出items得到sum。例如

store_id year event abc  def xyz 
123   2015 sale_2 7  0  0 
234   2015 sale_2 2  1  0 

我很難搞清楚最好的方法。通常我會在插入符號中使用dummyVars來做到這一點,但我需要的是總和而不是標誌。我已經看過tapply,但它不能處理2個以上的分組變量。

其他建議?

+0

看起來你意味着商店345爲商店123代替,以便5 + 2 = 7 – C8H10N4O2

回答

3
library(reshape2) 
dcast(df, store_id + year + event ~ item, fun.aggregate = sum, value.var='units') 
# store_id year event abc def xyz 
# 1:  123 2015 sale_2 2 0 0 
# 2:  234 2015 sale_3 0 1 0 
# 3:  345 2015 sale_2 0 0 5 

對於大型數據集考慮

# uses dcast.data.table, much faster 
library(data.table) 
setDT(df) 
dcast(df, store_id + year + event ~ item, fun.aggregate = sum, value.var='units') 
2
library(dplyr) 
library(tidyr) 
data %>% 
group_by(store_id, year, event, item) %>% 
summarize(N = sum(units)) %>% 
spread(item, N) 

您可以使用dplyr分組總結,tidyr的數據傳播到所需的項目列。