Дайте мне посмотреть, имею ли я это право: у вас есть 2 набора данных (названных 1 и 2), которые вы хотите объединить. В настоящее время вы получаете формат, показанный выше как df, но вы хотите, чтобы вывод был df2. Это правильно? Приведенный ниже код должен решить вашу проблему. Важно, чтобы ваш более новый набор данных появился первым в вызове full_join
. Тот, кто появится первым, получит приоритет по distinct
, когда решит, какие повторяющиеся строки удалить.
library(dplyr)
df <- data.frame(Year = c(2017,2018,2018,2018,2018,2018,2018),
Month = c("December","January","January","February",
"February","March","April"),
Dataset = c(1,1,2,1,2,2,2))
df1 <- dfx[dfx$Dataset == 1,]
df2 <- dfx[dfx$Dataset == 2,]
df.updated <- dplyr::full_join(df2, df1) %>%
distinct(Year, Month, .keep_all = TRUE)
df.updated
Year Month Dataset
1 2018 January 2
2 2018 February 2
3 2018 March 2
4 2018 April 2
5 2017 December 1
full_join
объединяет два фрейма данных с соответствующими переменными, сохраняя все строки из обоих. Затем distinct
отбрасывает дублирующиеся строки. Указывая имена переменных в distinct
, мы говорим, чтобы при определении уникальности учитывались только значения в Year
и Month
, поэтому, когда конкретная комбинация года / месяца появляется в более чем одном наборе данных, будет сохраняться только одна строка .
Обычно distinct
сохраняет только те переменные, которые используются для определения уникальности. Предоставив аргумент .keep_all = TRUE
, он сохранит все переменные. При возникновении конфликтов (например, 2 строки с февраля 2018 года с различными значениями Dataset
) он будет сохраняться в зависимости от того, какая строка появляется первая в кадре данных. Вот почему важно, чтобы ваш новый набор данных отображался первым в full_join
: это дает строки, которые отображаются в df2
приоритет над строками, которые также появляются в df1
.