寻找最佳变量以用首选变量的顺序替换 NA

Finding best variable to replace NAs with order of preferred variables

我有一个包含很多 NAs 的数据集。我想用 variable1 中的值创建一个新变量。如果 variable1 是 NA,则使用 variable2 代替。如果 variable2 也是 NA,则使用 variable3,等等。我已经创建了一个函数来执行此操作,但它没有按预期工作。

best_variable <- function(var_best1,var_best2,var_best3){

  if(!is.na(var_best1)) {return(var_best1)}  

  if(is.na(var_best1) & !is.na(var_best2)) {return(var_best2)}

  if(is.na(var_best1) & is.na(var_best2) & !is.na(var_best3)) {return(var_best3)}

  if(is.na(var_best1) & is.na(var_best2) & is.na(var_best3)) {return(NA)}
}  

参见 mtcars 数据集示例。

test <- head(mtcars)

test$vs[3:5] <- NA; test$am[test$am == 1] <- NA

test$new_var <- best_variable(test$vs,
                              test$am,
                              test$gear) 
Not the expected result as new_var[3] should be 4, as test$gear[3] is 4. 

test$new_var <- lapply(mtcars[,.(vs,am,gear)], best_variable) # error

best_variable(test$vs[3],
              test$am[3],
              test$gear[3]) # Gets the right result

我在这里错过了什么?为什么我的函数在应用于整个数据集时不起作用?

best_variable <- function (...) {
  apply(rbind(...), 2, function (a) {na.omit(a)[1]})
}

best_variable (test$vs, test$am, test$gear)

# [1] 0 0 4 0 0 1