有两个向量x和y。如果x包含NA
,我希望将NA
替换为来自" y"的值。与相应的索引。以下是一些有效的示例代码:
x <- c(1,2,3,NA,5)
y <- c(6,7,8,9,10)
combineVector <- function(x,y)
{
for (i in 1:length(x)){
if (is.na(x[i]) && !is.na(y[i])){
x[i] = y[i]
}
}
return (x)
}
combineVector(x,y)
# [1] 1 2 3 9 5
我几乎可以用任何编程语言编写这个。还有更多&#34; R&#34;执行此任务的方法?
答案 0 :(得分:4)
x <- c(1,2,3,NA,5)
y <- c(6,7,8,9,10)
x[is.na(x)] <- y[is.na(x)]
见上文。在x上使用is.na()会返回一个逻辑向量,其中x的NA元素为TRUE。在X和Y的选择器中使用这些将仅选择那些NA元素。在赋值中使用它将用x中的相应元素替换x中的NA元素。
当向量变大时,这将比循环快得多。
答案 1 :(得分:3)
试试这段代码:
x[is.na(x)] <- y[is.na(x)]
通过使用x
对is.na(x)
向量进行子集化,您只需 将x
的{{1}}值NA
分配给相应的索引y
向量。
答案 2 :(得分:0)
要生成以x
和y
为输入的新向量,您可以使用ifelse
函数:
x<-c(1,2,3,NA,NA)
y<-c(6,7,8,9,NA)
ifelse(is.na(x), y, x)
# [1] 1 2 3 9 NA