Я пытаюсь объединить 2 фрейма данных в R, но у меня есть два разных столбца с разными типами переменных ID. Иногда строка будет иметь значение для одного из этих столбцов, но не для другого. Я хочу рассмотреть их оба, так что если в одном кадре отсутствует значение для одного из столбцов, будет использоваться другой.
> df1 <- data.frame(first = c('a', 'b', NA), second = c(NA, 'q', 'r'))
> df1
first second
1 a <NA>
2 b q
3 <NA> r
> df2 <- data.frame(first = c('a', NA, 'c'), second = c('p', 'q', NA))
> df2
first second
1 a p
2 <NA> q
3 c <NA>
Я хочу объединить эти два фрейма данных и получить 2 строки:
- строка 1, поскольку она имеет то же значение для «первого» * 1007 *
- строка 2, потому что она имеет то же значение для «второй»
- строка 3 будет удалена, потому что df1 имеет значение для «second», но не «first», а df2 имеет обратное значение
Важно, чтобы NA игнорировались и не "соответствовали" в этом случае.
Я могу немного подойти:
> merge(df1,df2, by='first', incomparables = c(NA))
first second.x second.y
1 a <NA> p
> merge(df1,df2, by='second', incomparables = c(NA))
second first.x first.y
1 q b <NA>
Но я не могу связать эти два фрейма данных вместе, потому что у них разные имена столбцов, и это не похоже на способ "R" (в ближайшем будущем я будет иметь 3-й, 4-й и даже 5-й тип удостоверения личности).
Есть ли менее неуклюжий способ сделать это?
Редактировать: в идеале вывод должен выглядеть следующим образом:
> df3 <- data.frame(first = c('a', 'b'), second = c('p','q'))
> df3
first second
1 a p
2 b q
- строка 1 соответствует, поскольку столбец «first» имеет одинаковое значение в обоих фреймах данных и заполняет значение «second» из df2
- строка 2 соответствует, поскольку столбец "second" имеет одинаковое значение в обоих фреймах данных и заполняет значение "first" из df1
- строка 3 отсутствует, поскольку в обоих фреймах данных отсутствует столбец, значение которого