我有一个数据框架,可以在各个市场推出产品周。这是数据帧的快照。
Prod_ID Market_Name START_WEEK
11044913000 PHOENIX, AZ 1397
11044913000 WEST TEX/NEW MEX 1206
11159402003 PORTLAND,OR 1188
11159402003 SEATTLE/TACOMA 1188
11159402003 SPOKANE 1195
11159410010 PORTLAND,OR 1186
11159410010 SALT LAKE CITY 1190
11159410010 SEATTLE/TACOMA 1186
11159410010 SPOKANE 1187
11159410010 WEST TEX/NEW MEX 1197
11159410014 PORTLAND,OR 1198
11159410014 SEATTLE/TACOMA 1239
我想创建另一个数据框,这将为我提供每个Prod_ID
的累计总数,产品在前6周每周推出一次。对于上面的数据片段,输出应该是这样的。
Prod_ID Week1 Week2 Week3 Week4 Week5 Week6
11044913000 1 1 1 1 1 1
11159402003 2 2 2 2 2 2
11159410010 2 3 3 3 4 4
11159410014 1 1 1 1 1 1
为了便于显示,我只显示输出直到第6周,但我需要追踪到第12周才能满足我的需要。周由我的数据集中的4位数字表示,不是日期格式。请注意,并非所有产品的开始周都相同,因此我需要从Prod_ID
变量推断START_WEEK
的最早周。然后确定接下来的6周,以产生每周推出的市场总数。
感谢任何帮助。
答案 0 :(得分:1)
我想我理解你的问题。这是我的镜头。这个解决方案有几个阶段。
第一步是计算自打开以来每个int max;
int maxIndex = 1;
cin >> max;
for (int i = 2; i <= 5; i++) {
int n;
cin >> n;
if (n > max) {
max = n;
maxIndex = i;
}
}
cout << maxIndex;
的周数和周数的市场累计总和。这是通过以下代码块完成的。
Prod_ID
第二阶段是将df1 <- df %>%
group_by(Prod_ID, START_WEEK) %>%
count() %>%
arrange(Prod_ID, START_WEEK) %>%
ungroup() %>%
group_by(Prod_ID) %>%
mutate(tot_market = cumsum(n)) %>%
ungroup() %>%
group_by(Prod_ID) %>%
mutate(min_START_WEEK = min(START_WEEK)) %>%
mutate(week = START_WEEK - min_START_WEEK + 1)
df1
# # A tibble: 10 x 6
# # Groups: Prod_ID [4]
# Prod_ID START_WEEK n tot_market min_START_WEEK week
# <dbl> <int> <int> <int> <dbl> <dbl>
# 1 11044913000. 1206 1 1 1206. 1.
# 2 11044913000. 1397 1 2 1206. 192.
# 3 11159402003. 1188 2 2 1188. 1.
# 4 11159402003. 1195 1 3 1188. 8.
# 5 11159410010. 1186 2 2 1186. 1.
# 6 11159410010. 1187 1 3 1186. 2.
# 7 11159410010. 1190 1 4 1186. 5.
# 8 11159410010. 1197 1 5 1186. 12.
# 9 11159410014. 1198 1 1 1198. 1.
# 10 11159410014. 1239 1 2 1198. 42.
和week
扩展为Prod_ID
中的最大周数。
week
第三阶段是通过合并df2 <- expand.grid(min(df1$week):max(df1$week), unique(df1$Prod_ID))
colnames(df2) <- c("week", "Prod_ID")
和df1
并使用df2
来填充zoo::locf
中的NA
来完成的(市场总数) )tot_market
前面的值。
Prod_ID