我有一个包含购买数据的数据集,而我却想要解决一些问题。在进入它之前,这是我的数据:
> 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的负值。如果值为负,我需要检查是否有相应的购买,如果有,则负值可以保留。如果没有相应的购买,那么我需要从我的数据中删除该记录。例如,需要删除倒数第二个记录,因为它是否定的,并且在同一天没有相应的购买。第二天就购买了同样的产品,但由于他们有两次不同的访问,因此不能算作相应的购买。
我已经尝试过考虑如何做到这一点,并考虑了嵌入式应用函数,交叉函数或复制函数,但无论函数如何,我都无法掌握如何编写代码。任何帮助将不胜感激。
编辑:根据Henrik的请求,我为数据中添加了四个新行,这些新行的NDS_AMT为负,其中记录应保留在数据中。 “相应购买”的条件是CUST_ID,CI2_TRANS_DT,HR_SID和PROD_NUM值必须全部与NDS_AMT小于0的记录匹配。
答案 0 :(得分: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), ]