说我有这个数据
mydat <- structure(list(product_id = 11511:11512, coef = c(1L, 1L)),
.Names = c("product_id", "coef"), class = "data.frame",
row.names = c(NA, -2L))
在系数重复的情况下,如何将每个组的product_id乘以12个月 即期望的输出
product_id months coef
1 11511 2018-jan 1
2 11511 2018-feb 1
3 11511 2018-mar 1
4 11511 2018-apr 1
5 11511 2018-may 1
6 11511 2018-jun 1
7 11511 2018-jul 1
8 11511 2018-aug 1
9 11511 2018-sep 1
10 11511 2018-oct 1
11 11511 2018-nov 1
12 11511 2018-dec 1
13 11512 2018-jan 1
14 11512 2018-feb 1
15 11512 2018-mar 1
16 11512 2018-apr 1
17 11512 2018-may 1
18 11512 2018-jun 1
19 11512 2018-jul 1
20 11512 2018-aug 1
21 11512 2018-sep 1
22 11512 2018-oct 1
23 11512 2018-nov 1
24 11512 2018-dec 1
答案 0 :(得分:2)
使用data.table
的一种方式:
library(data.table)
mydat <- setDT(mydat)[, .(product_id = product_id,
months = format(seq(as.Date("2018-01-01"),
as.Date("2018-12-31"),
by = "month"), "%Y-%b"),
coef = coef), by = 1:nrow(mydat)][, nrow := NULL]
输出:
product_id months coef
1: 11511 2018-Jan 1
2: 11511 2018-Feb 1
3: 11511 2018-Mar 1
4: 11511 2018-Apr 1
5: 11511 2018-May 1
6: 11511 2018-Jun 1
7: 11511 2018-Jul 1
8: 11511 2018-Aug 1
9: 11511 2018-Sep 1
10: 11511 2018-Oct 1
11: 11511 2018-Nov 1
12: 11511 2018-Dec 1
13: 11512 2018-Jan 1
14: 11512 2018-Feb 1
15: 11512 2018-Mar 1
16: 11512 2018-Apr 1
17: 11512 2018-May 1
18: 11512 2018-Jun 1
19: 11512 2018-Jul 1
20: 11512 2018-Aug 1
21: 11512 2018-Sep 1
22: 11512 2018-Oct 1
23: 11512 2018-Nov 1
24: 11512 2018-Dec 1
答案 1 :(得分:1)
library(dplyr)
library(tidyr)
mydat %>% mutate(month=1) %>%
complete(product_id,coef, nesting(month=1:12)) %>%
mutate(month=as.Date(paste0('2018-',month,'-01')))
# A tibble: 24 x 3
product_id coef month
<int> <int> <date>
1 11511 1 2018-01-01
2 11511 1 2018-02-01
3 11511 1 2018-03-01
4 11511 1 2018-04-01
5 11511 1 2018-05-01
6 11511 1 2018-06-01
7 11511 1 2018-07-01
8 11511 1 2018-08-01
9 11511 1 2018-09-01
10 11511 1 2018-10-01
# ... with 14 more rows