Добавьте некоторые вводимые переменные в определенную строку В R

#r #dataset

Вопрос:

У меня есть набор данных, в котором каждая строка (участник) имеет свой идентификатор

один участник выполнил половину опроса на другом наборе данных:

 #first data set
ID<-c(999,998,997)
VAR1<-c(55,32,33)
VAR2<-c(44,22,99)
VAR3<-c(32,11,NA)
VAR4<-c(2,99,NA)
VAR5<-c(9,8,NA)
DF<-data.frame(ID,VAR1,VAR2,VAR3,VAR4,VAR5)

#participant missing answers
ID<-997
VAR1<-NA
VAR2<-NA
VAR3<-22
VAR4<-11
VAR5<-23
DF2<-data.frame(ID,VAR1,VAR2,VAR3,VAR4,VAR5)
 

как мне присоединиться к отсутствующим переменным участника из DF2 в DF?

Я не нашел ответа на этот вопрос в других вопросах и не преуспел в этом, используя merge() или full_join()

Спасибо!

Ответ №1:

Мы можем использовать data.table . Преобразуйте «data.frame» в «data.table» ( setDT(DF) ), соедините с » DF2 » on столбец «ИДЕНТИФИКАТОР». Получить другие столбцы из обоих наборов данных (‘нм1’ — ‘ВАР’ имена столбцов из первого набора), как и столбцы, такие же, на втором данные, мы используем i. дифференцировать, mget возвращает значения столбцов из второй list , использовать fcoalesce для colaecse соответствующие столбцы в Map (Таким образом, что он возвращает первые номера-на элемент) и назначить ( := ) обратно к исходным данным (‘ДФ’)

 library(data.table)
nm1 <- paste0("VAR", 1:5)
setDT(DF)[DF2, (nm1) := Map(function(x, y) fcoalesce(as.numeric(x), 
    as.numeric(y)), .SD, mget(paste0('i.', nm1))), on = .(ID), .SDcols = nm1]
 

-выход

 > DF
    ID VAR1 VAR2 VAR3 VAR4 VAR5
1: 999   55   44   32    2    9
2: 998   32   22   11   99    8
3: 997   33   99   22   11   23
 

Комментарии:

1. и если DF2-это только: ID<-997 VAR3<-22 VAR4<-11 VAR5<-23 DF2<-data.frame(ID,VAR3,VAR4,VAR5) ?

2. @EladRefoua в таком случае вам может понадобиться nm1 <- intersect(names(DF1)[-1], names(DF2)[-1])