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周。
答案 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
创建包含dplyr
和diff
的分组变量的选项,然后cumsum
行仅保留'SALE_PRICE'的最后一行0或(filter
)选择'SALE_PRICE'不为0的行。
|