将函数应用于两个向量" R"办法?

时间:2015-05-26 03:02:44

标签: r

有两个向量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;执行此任务的方法?

3 个答案:

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

通过使用xis.na(x)向量进行子集化,您只需 x的{​​{1}}值NA分配给相应的索引y向量。

答案 2 :(得分:0)

要生成以xy为输入的新向量,您可以使用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