我有一個數據,我試圖使用double for循環來進行聚合。基本上,我想通過每個TOP_LEVEL_CATEGORY來計算每個MEM_ID的購買週期。數據如下所示,R中的雙循環給出不相關的輸出
MEM_ID ORDER_DEL_DATE TOP_LEVEL_CATEGORY
999984 2016-01-07 household
999984 2016-02-03 household
999980 2015-12-16 household
999980 2016-01-03 household
999980 2016-01-05 household
999980 2016-02-14 household
999984 2016-01-07 personal-care
999980 2016-01-03 personal-care
999980 2016-01-30 personal-care
代碼
PC_test <- NA
for(i in unique(test$MEM_ID)){
for(j in unique(test$TOP_LEVEL_CATEGORY)){
PC_test[c(i,j)] <- data.frame(c(MEM_ID=i,CATEGORY=j,ifelse(nrow(test[test$MEM_ID==i & test$TOP_LEVEL_CATEGORY==j,])<=2,
max(test[test$MEM_ID==i & test$TOP_LEVEL_CATEGORY==j,"ORDER_DEL_DATE"])-min(test[test$MEM_ID==i & test$TOP_LEVEL_CATEGORY==j,"ORDER_DEL_DATE"]),
max(test[test$MEM_ID==i & test$TOP_LEVEL_CATEGORY==j,"ORDER_DEL_DATE"])-maxN(test[test$MEM_ID==i & test$TOP_LEVEL_CATEGORY==j,"ORDER_DEL_DATE"]))))
}
}
注:MAXN函數給出第二大。
投擲如下不相關輸出,
NA. X999984 household personal.care X999980
NA 999984 999980 999980 999980
NA personal-care household personal-care personal-care
NA 0 40 27 27
我期望的輸出在下面的格式,
MEM_ID TOP_LEVEL_CATEGORY PC_test
999984 household 27
999984 personal-care 0
999980 household 40
999980 personal-care 27
幫助是不勝感激。提前致謝!!!
你可能不需要'for'循環(類似'by'和'aggregate'的函數可能會有所幫助)。 __請添加關於如何在您的問題中計算「購買週期」的說明_ – bouncyball
@bouncyball,購買週期是特定客戶上一次購買與上次購買時的差異。 – Yashwanth