【发布时间】:2017-01-19 12:20:22
【问题描述】:
玩具模型在这里。该数据代表个人在一年中患上疾病(例如感冒)的天数。该向量是使用每日概率和 rbinom 函数生成的。例如,如果一个人感冒只持续一天,他们可能在感冒后的第二天有额外两天的免疫力,所以我的问题是如何转换这种形式的向量,我在其中再添加两天“对原始寒冷天气的免疫力 (= 1)。
改变这个:
0010001000001001
到这里:
0011101110001111
我查看了 'which' 函数,可以找到原始向量中 1 的索引,但不知道如何将每个 '1' 之后的两个索引替换为 '1'。我还认为我希望新向量的长度与前一个向量相同,即如果接近末尾的值为“1”,则不添加到末尾。
编辑: 我已经设计了这个循环函数,它可以完成这项工作,但我希望有更优雅和高效的解决方案。此外,如果我在原始向量中获得 0,1,1 序列,它将失败。有什么建议吗?
rm(list=ls())
library(zoo)
DayNonSup <- 80
VecLen <- 345
stuff1 <- rep(0,VecLen)
stuff1[c(15,35,335)] <- 1
convert <- function (vector, d) {
for (i in 1:100) {
a <- which(rollapply(vector, 3, identical, c(0,1,0)))[1] + 1
if(is.na(a)) {break}
vector[a:(a+d)] <- 1
}
vector
}
stuff2 <- convert(stuff1,DayNonSup)[1:VecLen]
stuff2
【问题讨论】: