Объединение фрейма данных на основе общих переменных и минимального расстояния - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть 2 набора данных V =

id A B X
1 a b 10
2 a b 9
3 b c 8
4 b d 17

и W =

ud A B Y
11 a b 11
12 a b 7
13 b c 8
14 b d 21

и я хочу слить их. Используя функции соединения dplyr s, код

merge = V %>% inner_join(W, by = c("A", "B"))

и результат

 id    ud A     B         X     Y
 1     11 a     b      10.0  11.0 
 1     12 a     b      10.0   7.00
 2     11 a     b      9.00  11.0 
 2     12 a     b      9.00   7.00
 3     13 b     c      8.00   8.00
 4     14 b     d     17.0   21.0 

Из-за внутреннего объединения были возвращены комбинации матчей. Тем не менее, я хочу (уникальное) соответствие между двумя переменными идентификатора id и ud (здесь это не так, потому что, например, 1 сопоставлен с 11 И 12). Я хочу создать эту уникальную корреспонденцию, присвоив id ud, для которой d(X,Y) минимально, используя некоторую функцию расстояния (например, d(x,y) = abs(x-y)).

Но как бы я это сделал?

1 Ответ

0 голосов
/ 12 ноября 2018

Что-то вроде ниже?

V %>% inner_join(W, by = c("A", "B")) %>% group_by(id) %>% slice(which.min(abs(X - Y)))

Выход:

     id A     B         X    ud     Y
  <int> <chr> <chr> <int> <int> <int>
1     1 a     b        10    11    11
2     2 a     b         9    11    11
3     3 b     c         8    13     8
4     4 b     d        17    14    21
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...