填写ID向量中的条目

daa*_*noo 1 loops r vector

寻找一个快速简单的解决方案来解决我只能通过循环来解决的问题.我有一个ID向量,看起来像这样:

id<-c(NA,NA,1,1,1,NA,1,NA,2,2,2,NA,3,NA,3,3,3)
Run Code Online (Sandbox Code Playgroud)

落在一个数字序列(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)
Run Code Online (Sandbox Code Playgroud)

循环遍历每个值并不困难,但我希望对许多很长的向量做这个,并希望有一个更简洁的解决方案.谢谢你的任何建议.

Dav*_*urg 5

这似乎有效.想法是使用zoo::na.locfNA正确填充s然后NA在它们在不同数字之间插入s

id.target <- zoo::na.locf(id, na.rm = FALSE)
id.target[(c(diff(id.target), 1L) > 0L) & is.na(id)] <- NA
id.target
## [1] NA NA  1  1  1  1  1 NA  2  2  2 NA  3  3  3  3  3
Run Code Online (Sandbox Code Playgroud)

  • @daanoo:除了David的评论之外,还有`aboutfun(seq_along(id),id,"constant")(seq_along(id))`这类似于`zoo :: na.locf`实际上是如何实现的. (2认同)