Пример, который вы приводите в своем вопросе, не может дать ожидаемого результата, поскольку у вас есть только строки, соответствующие идентификатору Джеймса, но у вас нет повторений идентификатора Тома. Поэтому я собираюсь предположить, что ваша вторая таблица является неполной относительно ожидаемого вывода, и что ваши входные данные выглядят следующим образом:
csv1 <- structure(list(V1 = c(80938L, 78397L, 73820L, 64920L, 83915L,
83649L), V2 = c("James", "Tom", "Pan", "Kim", "Amanda", "Linda"
), V3 = c("Nov-00", "Jul-20", "Sep-10", "Nov-01", "Jan-03", "Jul-07"
)), class = "data.frame", row.names = c(NA, -6L))
csv1
#> V1 V2 V3
#> 1 80938 James Nov-00
#> 2 78397 Tom Jul-20
#> 3 73820 Pan Sep-10
#> 4 64920 Kim Nov-01
#> 5 83915 Amanda Jan-03
#> 6 83649 Linda Jul-07
и
csv2 <- structure(list(V1 = c(80938L, 80938L, 80938L, 80938L, 80938L,
80938L, 78397L, 78397L, 78397L, 78397L, 78397L, 78397L), V2 = c(1L,
2L, 3L, 4L, 5L, 6L, 1L, 2L, 3L, 4L, 5L, 6L), V3 = c(500000L,
333L, 444L, 20000L, 21305L, 345067L, 4728L, 38120L, 39302L, 3920L,
3830L, 12380L), V4 = c(600000L, 456L, 456L, 4000L, 23456L, 2455L,
82920L, 3820L, 238202L, 28202L, 820230L, 29202L), V5 = c(700000L,
567L, 399L, 3222L, 3567L, 23356L, 39L, 38292L, 23920L, 293L,
9292L, 2929L), V6 = c(800000L, 467L, 799L, 3456L, 8533L, 244567L,
323992L, 2920L, 2822L, 83920L, 2929L, 8292L)), row.names = c(NA,
-12L), class = "data.frame")
csv2
#> V1 V2 V3 V4 V5 V6
#> 1 80938 1 500000 600000 700000 800000
#> 2 80938 2 333 456 567 467
#> 3 80938 3 444 456 399 799
#> 4 80938 4 20000 4000 3222 3456
#> 5 80938 5 21305 23456 3567 8533
#> 6 80938 6 345067 2455 23356 244567
#> 7 78397 1 4728 82920 39 323992
#> 8 78397 2 38120 3820 38292 2920
#> 9 78397 3 39302 238202 23920 2822
#> 10 78397 4 3920 28202 293 83920
#> 11 78397 5 3830 820230 9292 2929
#> 12 78397 6 12380 29202 2929 8292
Создание соединения очень просто: вы хотите, чтобы левое соединение csv2 на csv1 выглядело следующим образом:
library(dplyr)
csv1 %>%
left_join(csv2, by = "V1")
#> V1 V2.x V3.x V2.y V3.y V4 V5 V6
#> 1 80938 James Nov-00 1 500000 600000 700000 800000
#> 2 80938 James Nov-00 2 333 456 567 467
#> 3 80938 James Nov-00 3 444 456 399 799
#> 4 80938 James Nov-00 4 20000 4000 3222 3456
#> 5 80938 James Nov-00 5 21305 23456 3567 8533
#> 6 80938 James Nov-00 6 345067 2455 23356 244567
#> 7 78397 Tom Jul-20 1 4728 82920 39 323992
#> 8 78397 Tom Jul-20 2 38120 3820 38292 2920
#> 9 78397 Tom Jul-20 3 39302 238202 23920 2822
#> 10 78397 Tom Jul-20 4 3920 28202 293 83920
#> 11 78397 Tom Jul-20 5 3830 820230 9292 2929
#> 12 78397 Tom Jul-20 6 12380 29202 2929 8292
#> 13 73820 Pan Sep-10 NA NA NA NA NA
#> 14 64920 Kim Nov-01 NA NA NA NA NA
#> 15 83915 Amanda Jan-03 NA NA NA NA NA
#> 16 83649 Linda Jul-07 NA NA NA NA NA
Однако, похоже, вы бы предпочли иметь пустые ячейки, чем NA
, и в этом случае вам нужно преобразовать числа c столбцы на символы и замените NA
значения пустыми строками:
csv1 %>%
left_join(csv2, by = "V1") %>%
mutate_all(function(x) replace(x, is.na(as.character(x)), ""))
#> V1 V2.x V3.x V2.y V3.y V4 V5 V6
#> 1 80938 James Nov-00 1 500000 600000 700000 800000
#> 2 80938 James Nov-00 2 333 456 567 467
#> 3 80938 James Nov-00 3 444 456 399 799
#> 4 80938 James Nov-00 4 20000 4000 3222 3456
#> 5 80938 James Nov-00 5 21305 23456 3567 8533
#> 6 80938 James Nov-00 6 345067 2455 23356 244567
#> 7 78397 Tom Jul-20 1 4728 82920 39 323992
#> 8 78397 Tom Jul-20 2 38120 3820 38292 2920
#> 9 78397 Tom Jul-20 3 39302 238202 23920 2822
#> 10 78397 Tom Jul-20 4 3920 28202 293 83920
#> 11 78397 Tom Jul-20 5 3830 820230 9292 2929
#> 12 78397 Tom Jul-20 6 12380 29202 2929 8292
#> 13 73820 Pan Sep-10
#> 14 64920 Kim Nov-01
#> 15 83915 Amanda Jan-03
#> 16 83649 Linda Jul-07
Обратите внимание, что в ожидаемом выводе вы показываете возрастающие даты для тех, у которых есть повторяющиеся записи. Однако один, кажется, увеличивается по месяцам и один по дням, без каких-либо указаний на то, как эта модель была выбрана или должна быть достигнута. Поэтому я оставил их, поскольку они ожидают вашего совета.
Создано 02.08.2020 с помощью пакета REPEX (v0.3.0)