Вопрос с вопросом о присоединении к базе данных - PullRequest
0 голосов
/ 17 июня 2019

Когда я пытаюсь объединить две таблицы без ключа, это работает отлично. Но когда я предоставляю Ключ, он дает мне странные результаты:

Pls. помогите мне понять, что я упускаю.

library(gapminder) 
A <- gapminder[gapminder$country=="India" & gapminder$year %in% 1952:1987, 1:4]
B <- gapminder[gapminder$country=="India" & gapminder$year %in% 1977:2007, c(1:3, 5, 6)]
left_join(A, B)
left_join(A, B, by = "country")

Для без ключа: я получаю

country continent  year lifeExp       pop gdpPercap
  <fct>   <fct>     <int>   <dbl>     <dbl>     <dbl>
1 India   Asia       1952    37.4        NA       NA 
2 India   Asia       1957    40.2        NA       NA 
3 India   Asia       1962    43.6        NA       NA 
4 India   Asia       1967    47.2        NA       NA 
5 India   Asia       1972    50.7        NA       NA 
6 India   Asia       1977    54.2 634000000      813.
7 India   Asia       1982    56.6 708000000      856.
8 India   Asia       1987    58.6 788000000      977.

Но когда я использую Ключ, он дает мне 56 строк:

# A tibble: 56 x 7
   country continent year.x lifeExp year.y    pop
   <fct>   <fct>      <int>   <dbl>  <int>  <dbl>
 1 India   Asia        1952    37.4   1977 6.34e8
 2 India   Asia        1952    37.4   1982 7.08e8
 3 India   Asia        1952    37.4   1987 7.88e8
 4 India   Asia        1952    37.4   1992 8.72e8
 5 India   Asia        1952    37.4   1997 9.59e8
 6 India   Asia        1952    37.4   2002 1.03e9
 7 India   Asia        1952    37.4   2007 1.11e9
 8 India   Asia        1957    40.2   1977 6.34e8
 9 India   Asia        1957    40.2   1982 7.08e8
10 India   Asia        1957    40.2   1987 7.88e8
# ... with 46 more rows, and 1 more variable:
#   gdpPercap <dbl>

1 Ответ

0 голосов
/ 17 июня 2019

Это называется декартовым произведением / перекрестным соединением

Перекрестное соединение

По сути, это умножение строк, а не прямое пересечение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...