【问题标题】:Efficient dynamic addition of rows in dataframe and dynamic calculation in R数据框中行的有效动态添加和R中的动态计算
【发布时间】:2016-01-10 14:15:39
【问题描述】:

我有以下数据框(ts1):

                D1 Value N
1 20/11/2014 16:00 0.00 
2 20/11/2014 17:00 0.01  1
3 20/11/2014 19:00 0.05  2
4 20/11/2014 22:00 0.20  3
5 20/11/2014 23:00 0.03  4

我想插入行作为新 ts1 的 (N-1) 行数:

                D1 Value N
1 20/11/2014 16:00 0.00  1
2 20/11/2014 17:00 0.01  1
3 20/11/2014 18:00 0.03  1 <---
4 20/11/2014 19:00 0.05  1
5 20/11/2014 20:00 0.10  1 <---
6 20/11/2014 21:00 0.15  1 <---
7 20/11/2014 22:00 0.20  1
8 20/11/2014 23:00 0.03  1

可以看出,由于时间间隔 (N > 1),添加了第 3、5 和 6 行,ts1$Value 中的数字通过将 ts1$Value 的间隔除以它们的数量来填充新行。我想以最少的遍历数据帧的次数尽可能高效地添加值。

【问题讨论】:

  • 请参阅我对您之前问题的回答中的注 1:stackoverflow.com/questions/34705674/…
  • 非常感谢@G。 Grothendieck,我确实使用 N 作为中间计算。我的目标是填写 ts1$Value 中的缺失值。我的问题仍然是如何通过时间序列或使用 N 以最有效的方式做到这一点?

标签: r


【解决方案1】:

这里是完整的解决方案: 使用线性插值的最后一条命令解决问题

> Lines <- "D1,Value
+ 1,20/11/2014 16:00,0.00
+ 2,20/11/2014 17:00,0.01  
+ 3,20/11/2014 19:00,0.05  
+ 4,20/11/2014 22:00,0.20  
+ 5,20/11/2014 23:00,0.03"
> ts1 <- read.csv(text = Lines, as.is = TRUE)
> library(zoo)
> z <- read.zoo(ts1, tz = "", format = "%d/%m/%Y %H:%M")
> 
> z0 <- zoo(, seq(start(z), end(z), "hours"))
> zz <- merge(z, z0)
> interpolated <- na.approx(zz)
> interpolated
2014-11-20 16:00:00 2014-11-20 17:00:00 2014-11-20 18:00:00 2014-11-20 19:00:00 2014-11-20 20:00:00 2014-11-20 21:00:00 
               0.00                0.01                0.03                0.05                0.10                0.15 
2014-11-20 22:00:00 2014-11-20 23:00:00 
               0.20                0.03 

【讨论】:

  • 可以将最后4行替换为na.approx(z, xout = seq(start(z), end(z), "hours"))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多