错误:缺少需要TRUE / FALSE的值

时间:2016-03-15 05:14:41

标签: r

WEEK PRICE QUANTITY SALE_PRICE TYPE
1  4992  5.99  2847.50       0.00    3
2  4995  3.33 36759.00       3.33    3
3  4996  5.99  2517.00       0.00    3
4  4997  5.49  2858.50       0.00    3
5  5001  3.33 32425.00       3.33    3
6  5002  5.49  4205.50       0.00    3
7  5004  5.99  4329.50       0.00    3
8  5006  2.74 55811.00       2.74    3
9  5007  5.49  4133.00       0.00    3
10 5008  5.99  4074.00       0.00    3
11 5009  3.99 12125.25       3.99    3
12 5017  2.74 77645.00       2.74    3
13 5018  5.49  5315.50       0.00    3
14 5020  2.74 78699.00       2.74    3
15 5021  5.49  5158.50       0.00    3
16 5023  5.99  5315.00       0.00    3
17 5024  5.49  6545.00       0.00    3
18 5025  3.33 63418.00       3.33    3

如果有连续0个促销价格条目,那么我想保留最后一个条目的销售价格0.我想要删除第4996周并且想要保留4997周,我想要5004周,我想要删除5002.同样我想要删除5021& 5023并希望保持5024周。

1 个答案:

答案 0 :(得分:1)

我们可以使用data.table。将'data.frame'转换为'data.table'(setDT(df1))。根据“SALE_PRICE”(rleid)中存在0的逻辑向量,使用!SALE_PRICE创建分组变量。使用'grp'作为分组变量,我们获得'Subset of Data.table(.SD[.N]if'SALE_PRICE elements are all 0 or else {{的最后一行1}}。SD`即特定组的完整行。

get the

或者使用library(data.table) setDT(df1)[, grp:= rleid(!SALE_PRICE) ][,if(all(!SALE_PRICE)) .SD[.N] else .SD , grp ][, grp := NULL][] # WEEK PRICE QUANTITY SALE_PRICE TYPE # 1: 4992 5.99 2847.50 0.00 3 # 2: 4995 3.33 36759.00 3.33 3 # 3: 4997 5.49 2858.50 0.00 3 # 4: 5001 3.33 32425.00 3.33 3 # 5: 5004 5.99 4329.50 0.00 3 # 6: 5006 2.74 55811.00 2.74 3 # 7: 5008 5.99 4074.00 0.00 3 # 8: 5009 3.99 12125.25 3.99 3 # 9: 5017 2.74 77645.00 2.74 3 #10: 5018 5.49 5315.50 0.00 3 #11: 5020 2.74 78699.00 2.74 3 #12: 5024 5.49 6545.00 0.00 3 #13: 5025 3.33 63418.00 3.33 3 创建包含dplyrdiff的分组变量的选项,然后cumsum行仅保留'SALE_PRICE'的最后一行0或(filter)选择'SALE_PRICE'不为0的行。

|