【发布时间】:2019-09-16 08:14:03
【问题描述】:
我正在学习 data.table 并在一个地方感到困惑。需要帮助以了解如何实现以下目标。我拥有的数据,我需要过滤掉那些在第 1 个时期的销售额为 0 或在至少 14 个时期的销售额不大于 0 的品牌。我已经尝试过,我认为我已经实现了第一部分....但是我无法获得第二部分过滤那些在至少 14 个时期内销售额不 > 0 的品牌。
以下是我编写的示例数据和代码。请建议我如何实现第二部分?
library(data.table)
#### set the seed value
set.seed(9901)
#### create the sample variables for creating the data
group <- sample(1:7,1200,replace = T)
brn <- sample(1:10,1200,replace = T)
period <- rep(101:116,75)
sales <- sample(0:50,1200,replace = T)
#### create the data.table
df1 <- data.table(cbind(group,brn,period,sales))
#### taking the minimum value by group x brand x period
df1_min <- df1[,.(min1 = min(sales,na.rm = T)),by = c('group','brn','period')][order(group,brn,period)]
#### creating the filter
df1_min$fil1 <- ifelse(df1_min$period == 101 & df1_min$min1 == 0,1,0)
谢谢!!
【问题讨论】:
-
能否详细说明组变量是如何输入的?在针对 14 期限制进行评估之前,是否应在各组之间汇总每个品牌的期正销售额?
-
J.G. 的评论上面的数据有一些问题。 group、brn 和 period 是否构成主键? (有重复,但应将销售额相加)。另外,缺失的三人组是否可以认为销售额为 0?
-
@J.G.需要在组内每个品牌都有 # 个具有正销售额的时期。所以聚合必须发生在 x 组品牌
-
@JonNagra 我们可以在原始数据中有重复的行,因为每行是销售记录......所以如果一个品牌有多行意味着该品牌在多个场合被销售...... .我同意在这种情况下还需要有产品列,但我相信它不会妨碍我们的聚合
-
所以,如果我理解正确,一个 brn 可以从一组中取消资格(其中#sales>0 小于 14 个句点),但保留在另一个组中(>14 个)?或者,如果在任何组中,#sales>0 小于 14,则 brn 是否被取消资格?
标签: r filter count data.table