Как предложил Бен, вы можете использовать coalesce()
. Основываясь на ваших данных образца, я сделал следующее. Для каждой пары столбцов в одной и той же позиции в x
и y
я использовал coalesce()
и создал вектор. Я преобразовал результат sapply()
во фрейм данных и добавил worker_ID
в конце. Обратите внимание, что я использовал as.numeric()
для Var_3
. Я не уверен, как ваши данные, но Var_3 в x
может быть логическим, а не числовым. Я убедился, что Var_3 в x
и Var_3 в 'y` оба числовые.
library(tidyverse)
sapply(2:ncol(x), function(whatever){
coalesce(as.numeric(pull(x, whatever)),
as.numeric(pull(y, whatever))) -> foo
return(foo)
}) %>%
as_tibble %>%
bind_cols(work_ID = pull(x, 1), .)
# A tibble: 2 x 4
# work_ID V1 V2 V3
# <int> <dbl> <dbl> <dbl>
#1 1 33 75 NA
#2 2 NA 46 66
ОБНОВЛЕНИЕ
Принимая совет Акруна, я думаю, что следующий код работает хорошо. map_dfc()
проходит через каждую пару столбцов так же, как sapply()
. Хорошо, что map_dfc()
создает фрейм данных;нет необходимости использовать as_tibble()
.
map_dfc(2:ncol(x), ~ coalesce(as.numeric(pull(x, .x)),
as.numeric(pull(y, .x)))) %>%
bind_cols(work_ID = pull(x, 1), .)