相关疑难解决方法(0)

仅按时间序列填写NA到有限的数量

有没有办法我们可以NA用一个有限数量的前锋填充一个zoo或一个xts对象NA.换句话说,NA最多连续3次填充s NA,然后将NAs从第4个值保持到有效数字.

像这样的东西.

library(zoo)
x <- zoo(1:20, Sys.Date() + 1:20)
x[c(2:4, 6:10, 13:18)] <- NA
x

2014-09-20 2014-09-21 2014-09-22 2014-09-23 2014-09-24 2014-09-25 2014-09-26 
         1         NA         NA         NA          5         NA         NA 
2014-09-27 2014-09-28 2014-09-29 2014-09-30 2014-10-01 2014-10-02 2014-10-03 
        NA         NA         NA         11         12         NA         NA 
2014-10-04 2014-10-05 2014-10-06 2014-10-07 2014-10-08 2014-10-09 
        NA         NA         NA         NA         19         20
Run Code Online (Sandbox Code Playgroud)

期望的输出,将是变量n = 3的东西

2014-09-20 2014-09-21 2014-09-22 2014-09-23 2014-09-24 2014-09-25 2014-09-26 
         1 …
Run Code Online (Sandbox Code Playgroud)

r time-series zoo xts

11
推荐指数
1
解决办法
1157
查看次数

矢量化seq的优雅方式?

尽管标题相似,但这与R中的Vectorizing rep和seq不同.

我的直接目标:给定一个向量,我想生成一个包含原始值的新向量,以及旧值中每个值之间的间隔间隔.这并不困难.

一种策略是使用更一般的函数,给定两个向量和指定的by间隔,使用相同的by值将seq重复应用于来自两个原始向量的数字对.我没有找到这样做的内置函数. seq似乎抵制处理向量作为参数.这是一个执行更一般操作的函数(我可以根据我的需要使用它):

multiseq <- function(froms, tos, by){
  x <- c(); 
  for (i in seq_along(froms)){
    x <- c(x, seq(from=froms[i], to=tos[i], by=by))
  }
  x
}
Run Code Online (Sandbox Code Playgroud)

例如:

> multiseq(1:2, 1.75:2.75, .25)
[1] 1.00 1.25 1.50 1.75 2.00 2.25 2.50 2.75
Run Code Online (Sandbox Code Playgroud)

(这只是一个简单的例子.我真正想要的是用任意序列来做这件事,例如

-0.89115386 -0.75346155 -0.61576924 -0.47807693 -0.34038463 -0.20269232 -0.06500001  0.07269230  0.21038460  0.34807691  0.48576922  0.62346153  0.76115383
Run Code Online (Sandbox Code Playgroud)

我想将每个间隔细分为五个,以创建一个具有5倍元素的新序列.)

只要序列不是太长,我相信,反复延伸矢量不应该太慢.如果我需要大序列,我可以重写以预先扩展向量并填充它.但是,它仍然让我在循环中完成此操作.是否有更优雅,功能性的编程,R-ly方式?

谢谢.

r

5
推荐指数
2
解决办法
2338
查看次数

标签 统计

r ×2

time-series ×1

xts ×1

zoo ×1