我对R有点新手我有两个问题。我有一个数据框,比如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)获得上述内容后,我将其与Sales数据集合并,该数据集仅在每年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日之间的所有月度日期和下一个可用的销售数据中填写0,该数据发生在05/31/2001 其他水果应该在05/31/2000和05/31/2001之间具有相同的销售数字,依此类推。
上面只是一个例子,但如果缺少填写以前可用的日期销售数字,如果之前的可用日期为空则填写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
答案 0 :(得分: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
要构建core
df,我想出了一种方法,该方法在第一个月创建日期,然后从每个月中减去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)
)