Использование dplyr
:
rbind(df_table1,df_table2) %>% group_by(Date) %>% filter(Metric1==max(Metric1))
# A tibble: 5 x 4
# Groups: Date [5]
Date Metric1 Metric2 Metric3
<chr> <dbl> <dbl> <dbl>
1 1/1/2018 25. 4.60 49.
2 2/1/2018 6. 3.60 67.
3 3/1/2018 19. 2.90 48.
4 4/1/2018 78. 5.70 35.
5 5/1/2018 46. 3.30 29.
Обратите внимание, что это предполагает, что если Metric1 больше в одной таблице, чем в другой, то так же будут и все остальные метрики.Мне не было ясно, что произойдет, если это не так.
Вот странно сложный код, который будет хранить одну строку для каждой даты в обеих таблицах, сохраняя либо строку, где все метрики больше, чемв другой строке, ИЛИ, если ни одна из этих строк не соответствует этому правилу, она сохранит строку из таблицы1:
Сначала давайте немного изменим данные:
df_table1= data.frame(Date=c('1/1/2018','2/1/2018','3/1/2018','4/1/2018'),
Metric1 = c(25,6,18,56),
Metric2 = c(4.6,3.6,2.6,6.3),
Metric3 = c(49,67,36,29), stringsAsFactors = FALSE)
df_table2= data.frame(Date=c('3/1/2018','4/1/2018','5/1/2018'), Metric1 = c(19,78,46),
Metric2 = c(2.9,5.7,3.3),
Metric3 = c(48,35,29), stringsAsFactors = FALSE)
Теперь январь4-й ряд будет иметь метрику 2 выше в одном ряду, в то время как другие показатели выше в другом.
rbind(df_table1,df_table2) %>%
group_by(Date) %>%
mutate(keeper=(Metric1==max(Metric1) & Metric2==max(Metric2) & Metric3==max(Metric3))) %>%
group_by(Date,keeper) %>%
filter(row_number()==1) %>%
group_by(Date) %>% add_count() %>%
mutate(keeper=ifelse(n==1,TRUE,keeper)) %>%
filter(keeper) %>% select(-keeper, -n)
# A tibble: 5 x 4
# Groups: Date [5]
Date Metric1 Metric2 Metric3
<chr> <dbl> <dbl> <dbl>
1 1/1/2018 25. 4.60 49.
2 2/1/2018 6. 3.60 67.
3 4/1/2018 56. 6.30 29.
4 3/1/2018 19. 2.90 48.
5 5/1/2018 46. 3.30 29.
Я уверен, что есть более элегантный способ добиться этого, но я не знаю, что этоэто - я получил это с большим количеством проб и ошибок ...
Наконец, если вы решите, что хотите просто сохранить версию таблицы table1, если есть дублирующиеся даты, независимо от метрик, сделайте это:
rbind(df_table1,df_table2) %>% filter(!duplicated(Date))
Date Metric1 Metric2 Metric3
1 1/1/2018 25 4.6 49
2 2/1/2018 6 3.6 67
3 3/1/2018 18 2.6 36
4 4/1/2018 56 6.3 29
5 5/1/2018 46 3.3 29