填写ID向量

时间:2016-01-14 10:54:38

标签: r loops vector

通过循环寻找一个快速简单的解决方案,解决我只能通过优雅解决的问题。我有一个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)

通过循环遍历每个值并不困难,但我希望对许多非常长的向量执行此操作,并且希望有更简洁的解决方案。谢谢你的任何建议。

2 个答案:

答案 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