2014-01-29 214 views
1

我有一個包含購買數據的數據集,我試圖找出一些東西。跳進去之前,這裏是我的數據是這樣的:交易數據

> df.f[df.f$CUST_ID == badIDs[1], c(1, 20, 4, 11, 13)] 

CUST_ID CI2_TRANS_DT HR_SID NDS_AMT PROD_NUM 
    1 2013-12-14  10 0.00 a5g4324 
    1 2013-12-14  10 0.00 k4jn42k 
    1 2013-12-14  10 0.00 f3ft52f3 
    1 2013-12-14  10 0.00 f454fn 
    1 2013-12-14  10 0.00 l2k41m 
    1 2013-12-14  10 2.25 nb24b2x3 
    1 2013-12-14  10 0.00 k1s4m6 
    1 2013-12-14  10 0.00 1z34fl 
    1 2013-12-14  10 0.95 f3ft52f3 
    1 2013-12-17  6 4.45 v0d45j 
    1 2013-12-17  6 0.00 a5g4324 
    1 2013-12-17  6 4.75 g6b673va 
    1 2013-12-17  6 0.00 f454fn 
    1 2013-12-19  7 -4.75 bh431d11 
    1 2013-12-20  6 4.75 bh431d11 
    2 2013-12-14  6 4.75 g6b673va 
    2 2013-12-15  6 3.75 nb24b2x3 
    2 2013-12-15  6 -3.75 nb24b2x3 
    2 2013-12-16  6 5.90 bh431d11 

以上變量是客戶ID號,該交易的日期,當日,銷售金額和產品數量的小時,以該順序。我遇到的問題是NDS_AMT的負值。如果價值是負值,我需要檢查是否有相應的購買,如果有,則負值可以保持在。如果沒有相應的購買,那麼我需要從我的數據中刪除該記錄。作爲一個例子,倒數第二個記錄需要被刪除,因爲它是負數,並且在同一天沒有相應的購買。第二天購買相同的產品,但由於它們在兩次不同的訪問中,因此不能算作對應的購買。

我試過想如何做到這一點,並考慮過嵌入式應用功能,相交功能或重複功能,但無論我無法掌握如何編寫代碼的功能。任何幫助將不勝感激。

編輯:根據亨裏克的要求,我添加了四個新行到一個新客戶的數據有一個負NDS_AMT記錄應該應該留在數據中。 「相應購買」的條件是CUST_ID,CI2_TRANS_DT,HR_SID和PROD_NUM值必須全部匹配那些NDS_AMT小於0的記錄。

+0

我認爲你需要提供一個**最小**的例子,其中「負值可以留在」的實例以及何時應該刪除它們。您需要澄清如何判斷「當天沒有相應的購買」。乾杯。 – Henrik

+0

我做了一些編輯以滿足您的要求;請讓我知道是否需要更多數據。謝謝! – brittenb

回答

0

所以這裏是我提出的解決方案。顯然,隨意提出你認爲合適的調整建議。

refundRecords <- df.f[df.f$NDS_AMT < 0, ] 
refundRecords$NDS_AMT <- refundRecords$NDS_AMT * -1 
dups <- apply(refundRecords, 1, function(x) apply(df.f[df.f$CUST_ID == x[1], ], 1, function(y) sum(x %in% y))) 
id2check <- sapply(dups, function(x) any(x == 5)) 
badIDs <- unique(df.f$CUST_ID[rownames(df.f) %in% names(id2check[!id2check])]) 
df.f <- df.f[df.f$NDS_AMT >= 0 | !(df.f$CUST_ID %in% badIDs), ]