0

私は RI の初心者で、2 つの質問があります。私はデータフレームを持っています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 月末にのみ利用可能な Sales データセットとマージすると、次のようになります。

  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、2 番目のデータフレームに次の名前が付けられるとし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

dfを構築するためcoreに、月の最初に日付を作成し、それぞれから 1 を引いて前月の最後の日付を取得する方法を思いつきました。次に、それぞれを 3 回繰り返し、`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 に答える