0

我是 RI 的新手,有两个问题。我有一个数据框,说FruitsNew

   Fruit 
1 Apples
2 Oranges
3 Bananas

Q1)我想复制数据并将从 2000 年 5 月 31 日开始的每月日期添加到上面,例如

   Fruit  date
1 Apples  2000-05-31  
2 Oranges 2000-05-31
3 Bananas 2000-05-31
4 Apples  2000-06-30
5 Oranges 2000-06-30
6 Bananas 2000-06-30

等等...

Q2)在获得上述信息后,我将其与仅在每年 5 月底可用的销售数据集合并,因此它看起来像这样

  Fruit   date          sales
1 Apples  2000-05-31    1000
2 Oranges 2000-05-31     
3 Bananas 2000-05-31    500    
4 Apples  2000-06-30
5 Oranges 2000-06-30
6 Bananas 2000-06-30
...
7 Apples  2001-05-31    2000   
8 Oranges 2001-05-31    200
9 Bananas 2001-05-31    600

橙子没有销售,但我想在 2000 年 5 月 31 日和下一个可用的销售数据(发生在 2001 年 5 月 31 日)之间的所有每月日期用 0 填充其他水果应该有相同的2000 年 5 月 31 日和 2001 年 5 月 31 日之间的销售编号,依此类推。

以上只是一个示例,但想法是如果缺少填写该日期以前可用的销售编号,如果以前可用的日期为空则填写 0

像这样的东西

  Fruit   date           sales
1 Apples  2000-05-31     1000    
2 Oranges 2000-05-31     0
3 Bananas 2000-05-31     500    
4 Apples  2000-06-30     1000
5 Oranges 2000-06-30     0
6 Bananas 2000-06-30     500
7 Apples  2001-05-31     2000   
8 Oranges 2001-05-31     200
9 Bananas 2001-05-31     600
4

1 回答 1

0

假设您的第一个数据框将被命名core,而您的第二个数据框将被命名merg.yr

merg.yr <- merge(core, year.sale, by.x=1:2, by.y=1:2, all.x=TRUE)
merg.yr[is.na(merg.yr)] <- 0

为了构建coredf,我想出了一种方法,该方法在月份的第一天创建日期,然后从每个日期中减去 1 以获得上个月的最后一个日期。然后,我将每个重复三遍,让 `data.frame 函数填充结果:

core <- data.frame(fruit =c('Apples','Oranges','Bananas'), 
                  date=rep( as.Date(seq(ISOdate(2000, 6,1), 
                                        ISOdate(2001,6,1), by='month')) -1,
                            each=3)
                  )
于 2013-10-04T17:01:57.793 回答