2016-12-28 14 views
0

データを自動集計しようとしています。 意図された出力は、同様の優先順位の塗りつぶしを持つギャップを示しています。記入には欠落した日付の記入が必要です。R:データシーケンスの自動補完とデータ補完?

Rでは、日付の間に空白を埋めてデータを自動収集する方法はありますか。記録されたデータを示す


最小限の作業例日付配列について

入力(2016年12月25日、2017年1月5日)

> aa<- data.frame(a=c(1,11,111),b=c(2,22,222),length=c(3,5,1),date=c(as.Date("28.12.2016",format="%d.%m.%Y"), as.Date("30.12.2016",format="%d.%m.%Y"), as.Date("01.01.2017",format="%d.%m.%Y"))) 
> 
> dateSeq<-seq.Date(as.Date("2016/12/25"), as.Date("2017/01/05"), "day") 
> dateSeq 
[1] "2016-12-25" "2016-12-26" "2016-12-27" "2016-12-28" "2016-12-29" 
[6] "2016-12-30" "2016-12-31" "2017-01-01" "2017-01-02" "2017-01-03" 
[11] "2017-01-04" "2017-01-05" 

> 
> aa 
    a b length  date 
1 1 2  3 2016-12-28 
2 11 22  5 2016-12-30 
3 111 222  1 2017-01-01 

。 NA-塗りつぶし、shown to some extent by Joel Wilson、そのような私たちの目標は、その隣人に依存similar precedenceアプローチと呼ばれるものでNAエントリを埋めるためにある

dateSeq<-seq.Date(as.Date("2016/12/25"), as.Date("2017/01/05"), "day") 
df<-data.frame(dateSeq) 
df$date = as.Date(df$date, format = "%Y-%m-%d") 
merge(df, aa, by = "date", all.x= TRUE) 
    a b  length date 
0.1 NA NA  NA  2016-12-25 
0.2 NA NA  NA  2016-12-26 
0.3 NA NA  NA  2016-12-27 
1 1 2  3  2016-12-28 
0.4 NA NA  NA  2016-12-29 
2 11 22  5  2016-12-30 
0.5 NA NA  NA  2016-12-31 
3 111 222  1  2017-01-01 
0.6 NA NA  NA  2017-01-02 
0.7 NA NA  NA  2017-01-03 
0.8 NA NA  NA  2017-01-04 
0.9 NA NA  NA  2017-01-05 
0.10 NA NA  NA  2017-01-06 

ことで行われます。

入力日付-補完と同様の優先順位を持つ出力

 a b  length date 
0.1 0.9 2  3  2016-12-25 
0.2 1 2.1  2  2016-12-26 
0.3 0.8 2.2  3  2016-12-27 
1 1 2  3  2016-12-28 
0.4 10 20  4  2016-12-29 
2 11 22  5  2016-12-30 
0.5 80 150  3  2016-12-31 
3 111 222  1  2017-01-01 
0.6 100 130  5  2017-01-02 
0.7 50 200  3  2017-01-03 
0.8 20 100  2  2017-01-04 
0.9 14 40  5  2017-01-05 
0.10 80 140  4  2017-01-06 
+1

あなたがする必要があることすべてがfirstintended出力 –

+0

ハァッ取得するためにマージされますか? ...「a」、「b」、「length」の値はどうやって取得できましたか? – Sotos

+0

@Sotosは '類似の優先順位 'アプローチで、隣接するものと似た値で、元々はLOCF(最後の観測が繰り越されました)を使用しましたが、現在はより良い代替方法を見つけることを試みています。 –

答えて

1

私のポイントを埋める意図されていた:

dateSeq<-seq.Date(as.Date("2016/12/25"), as.Date("2017/01/05"), "day") 
df<-data.frame(dateSeq) 
df 
#   date 
# 1: 2016-12-25 
# 2: 2016-12-26 
# 3: 2016-12-27 
# 4: 2016-12-28 
# 5: 2016-12-29 
# 6: 2016-12-30 
# 7: 2016-12-31 
# 8: 2017-01-01 
# 9: 2017-01-02 
#10: 2017-01-03 
#11: 2017-01-04 
#12: 2017-01-05 
#13: 2017-01-06 

df$date = as.Date(df$date, format = "%Y-%m-%d") 
merge(df, aa, by = "date", all.x= TRUE) 
#   date a b length 
# 1: 2016-12-25 NA NA  NA 
# 2: 2016-12-26 NA NA  NA 
# 3: 2016-12-27 NA NA  NA 
# 4: 2016-12-28 1 2  3 
# 5: 2016-12-29 NA NA  NA 
# 6: 2016-12-30 11 22  5 
# 7: 2016-12-31 NA NA  NA 
# 8: 2017-01-01 111 222  1 
# 9: 2017-01-02 NA NA  NA 
#10: 2017-01-03 NA NA  NA 
#11: 2017-01-04 NA NA  NA 
#12: 2017-01-05 NA NA  NA 
#13: 2017-01-06 NA NA  NA 
+0

良い点+1、これは* 1用です。意図されたアウトプット*ので、* 2のオートパーフェクション。意図されたアウトプット*はまだありません。 –

+0

データを実際にどのように埋め込んでいるのかはっきりしていないので、私は前進できません –