【问题标题】:R: autopopulation of data and date complements in a date sequence?R:日期序列中数据和日期补码的自动填充?
【发布时间】:2016-12-28 12:36:03
【问题描述】:

我正在尝试自动填充数据。我需要一个命令来填补日期之间的空白:Intended Output 显示具有相似优先级填充的空白。填写需要填写缺失的日期条目。

在 R 中,如何通过填充某些日期序列中日期之间的间隙来自动填充数据?


最小的工作示例

输入日期序列(2016-12-25、2017-01-05)

> 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 是这样完成的

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

我们的目标是使用 similar precedence 方法填充 NA 条目,该方法取决于其邻居。

预期输出,输入日期补码和类似的优先级填充

     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

【问题讨论】:

  • 所有你需要做的就是合并以获得第一个预期的输出
  • 嗯?...您是如何获得ablength 的值的?
  • @Sotos by similar precedence 方法,其中值与其邻居相似,我最初使用 LOCF(最后的观察结果),但现在试图找到更好的填充替代方案。
  • 是否有功能或任何约束来定义您对similar precedence 的要求?
  • @Sotos 不,我试图找到与它周围的值有些接近的方法:移动平均模型、自回归模型和 ARIMA 模型可能是一些假设数据充当的方法时间序列。对于这种情况,我不知道它们是否被实施到 R 中。

标签: r auto-populate auto-populating


【解决方案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

【讨论】:

  • 好点+1,这是给1的。预期输出 所以的自动填充 2。预期的输出仍然缺失。
  • 我不清楚你实际上是如何填写数据的,所以我不能继续前进
猜你喜欢
  • 1970-01-01
  • 2014-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-06
  • 1970-01-01
  • 2011-04-03
相关资源
最近更新 更多