通过循环寻找一个快速简单的解决方案,解决我只能通过优雅解决的问题。我有一个ID矢量,看起来像这样:
id<-c(NA,NA,1,1,1,NA,1,NA,2,2,2,NA,3,NA,3,3,3)
属于单个数字序列(id[6], id[14]
)之间的NA需要被该数字替换。但是,不满足这种条件的NA(两个不同数字序列之间的那些)需要保持不变(即id[1],id[2],id[8],id[12]
)。因此,目标载体是:
id.target<-c(NA,NA,1,1,1,1,1,NA,2,2,2,NA,3,3,3,3,3)
通过循环遍历每个值并不困难,但我希望对许多非常长的向量执行此操作,并且希望有更简洁的解决方案。谢谢你的任何建议。
答案 0 :(得分:5)
这似乎有效。我们的想法是使用A2::toDoOrNotToDo
来正确填充zoo::na.locf
,然后在不同数字之间插入NA
NA
答案 1 :(得分:1)
这是base R
选项
d1 <- do.call(rbind,lapply(split(seq_along(id), id), function(x) {
i1 <- min(x):max(x)
data.frame(val= unique(id[x]), i1)}))
id[seq_along(id) %in% d1$i1 ] <- d1$val
id
#[1] NA NA 1 1 1 1 1 NA 2 2 2 NA 3 3 3 3 3