2017-10-14 26 views
1

我有两个向量,我希望的第三载体,其是在第一向量的NA位置条件condititonal级联

a= c(1,2,NA,NA,3,NA,NA,5) 
b= c("a","b","c","d","e","f","g","h") 


desired output= c("a","b c d",NA,NA,"e f g",NA,NA,"h") 

回答

2

我们可以使用经由zoo::na.locf()分组粘贴值一起通过tapply()。然后我们将它们替换为原始矢量。 !

replace(a, !is.na(a), tapply(b, zoo::na.locf(a), paste, collapse = " ")) 
# [1] "a"  "b c d" NA  NA  "e f g" NA  NA  "h"  
+1

可以在is.na的cumsum组,我想 – Frank

+1

@Frank - 我试过了。但新的答案出现在同一个想法中,所以我会按原样离开。 –

0

在基础R你能做到这一点...

x <- a 
x[!is.na(a)] <- tapply(b, cumsum(!is.na(a)), paste, collapse=" ") 

x 
[1] "a"  "b c d" NA  NA  "e f g" NA  NA  "h"