2014-01-29 123 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), ]