有关加入数据库代码问题的问题

时间:2019-06-17 16:42:34

标签: r

当我尝试在没有KEY的情况下联接两个表时,它可以完美运行。但是当我提供密钥时,它给了我奇怪的结果:

请。帮助我了解我错过了什么。

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.

但是,当我使用Key时,它会给我约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 :(得分:0)

它称为笛卡尔乘积/交叉联接

Cross Joins

基本上是行的乘法,而不是直线相交。