Объединение двух наборов данных, но без дублирования - PullRequest
1 голос
/ 01 мая 2019

Я хотел бы прикрепить информацию из одного кадра данных и добавить ее к другому, но я просто не могу заставить объединение работать так, как я хочу.

Мой пример:

a <- data.frame(well = c(222, 222, 222, 21, 21,21,43,64,64,64),
                   area = c("H", "H", "H", "C", "C", "C", "D", "E", "E", "E"))
b <- data.frame(well = c(222, 21, 43, 64),
                   score = c(12000, 10000, 9000, 20000))

Мне бы хотелось, чтобы результат выглядел следующим образом:

 well score area
1  222 12000 H
2   21 10000 C
3   43  9000 D
4   64 20000 E

Но я получаю это (я не хочу, чтобы числа скважин дублировались):

 well area score
1    21    C 10000
2    21    C 10000
3    21    C 10000
4    43    D  9000
5    64    E 20000
6    64    E 20000
7    64    E 20000
8   222    H 12000
9   222    H 12000
10  222    H 12000

Мои фактические данные содержат много сотен строк.

Спасибо

Ответы [ 2 ]

0 голосов
/ 01 мая 2019

Использование data.table присоединение

library(data.table)
setDT(unique(a))[b, on = .(well)]
#   well area score
#1:  222    H 12000
#2:   21    C 10000
#3:   43    D  9000
#4:   64    E 20000
0 голосов
/ 01 мая 2019

Поскольку у вас есть дубликаты в a, вы получаете их и в merge.Один из вариантов - иметь только unique строки a, а затем merge

merge(unique(a), b)

#  well area score
#1   21    C 10000
#2   43    D  9000
#3   64    E 20000
#4  222    H 12000

или взять unique после объединения

unique(merge(a, b))

, что может бытьсделано с использованием dplyr на left_join и distinct

library(dplyr)

left_join(distinct(a), b)
left_join(a, b) %>% distinct()
...