У меня есть два кадра данных, которые имеют несколько столбцов с одинаковыми именами и другие с разными именами. Кадры данных выглядят примерно так:
df1
ID hello world hockey soccer
1 1 NA NA 7 4
2 2 NA NA 2 5
3 3 10 8 8 23
4 4 4 17 5 12
5 5 NA NA 3 43
df2
ID hello world football baseball
1 1 2 3 43 6
2 2 5 1 24 32
3 3 NA NA 2 23
4 4 NA NA 5 15
5 5 9 7 12 23
Как вы можете видеть, в двух общих столбцах ("привет" и "мир") некоторые данные находятся в одном из кадров данных, а остальные - в другом.
То, что я пытаюсь сделать, это (1) объединить 2 кадра данных с помощью "id", (2) объединить все данные из столбцов "привет" и "мир" в обоих кадрах в 1 столбец "привет" и 1 "мир ", и (3) имеют окончательный кадр данных, также содержат все остальные столбцы в двух исходных кадрах (" хоккей "," футбол "," футбол "," бейсбол "). Итак, я хочу, чтобы конечный результат был таким:
ID hello world hockey soccer football baseball
1 1 2 3 7 4 43 6
2 2 5 3 2 5 24 32
3 3 10 8 8 23 2 23
4 4 4 17 5 12 5 15
5 5 9 7 3 43 12 23
Я новичок в R, поэтому только те коды, которые я пробовал, являются вариантами merge
и я пробовал ответ, который я нашел здесь, который был основан на аналогичном вопросе: R: объединение копий одной и той же переменной. Однако мои наборы данных на самом деле намного больше, чем то, что я показываю здесь (около 20 соответствующих столбцов (например, "привет" и "мир") и 100 несовпадающих (например, "хоккей" и "футбол") поэтому я ищу что-то, что не потребует от меня написать все это вручную.
Любая идея, если это можно сделать? Извините, я не могу представить пример своих усилий, но я действительно не знаю, с чего начать:
mydata <- merge(df1, df2, by=c("ID"), all = TRUE)
Для воспроизведения кадров данных:
df1 <- structure(list(ID = c(1L, 2L, 3L, 4L, 5L), hellow = c(2, 5, NA, NA, 9),
world = c(3, 1, NA, NA, 7), football = c(43, 24, 2, 5, 12),
baseball = c(6, 32, 23, 15, 23)), .Names = c("ID", "hello", "world",
"football", "baseball"), class = "data.frame", row.names = c(NA, -5L))
df2 <- structure(list(ID = c(1L, 2L, 3L, 4L, 5L), hellow = c(NA, NA, 10, 4, NA),
world = c(NA, NA, 8, 17, NA), hockey = c(7, 2, 8, 5, 3),
soccer = c(4, 5, 23, 12, 43)), .Names = c("ID", "hello", "world", "hockey",
"soccer"), class = "data.frame", row.names = c(NA, -5L))