有没有办法我们可以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中的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方式?
谢谢.