【发布时间】:2022-01-08 20:22:21
【问题描述】:
我有两张桌子。第一个表有 206 206 行,第二个有 300 行。这样使用left_join 后:
final <- left_join(first, second, by="CATEGORY")
决赛桌有 223 201 行。我不明白为什么要添加额外的行。我最后需要有 206 206 行,只添加了额外的列。可能是什么问题?我尝试了inner_join,但我仍然遇到同样的问题。
【问题讨论】:
我有两张桌子。第一个表有 206 206 行,第二个有 300 行。这样使用left_join 后:
final <- left_join(first, second, by="CATEGORY")
决赛桌有 223 201 行。我不明白为什么要添加额外的行。我最后需要有 206 206 行,只添加了额外的列。可能是什么问题?我尝试了inner_join,但我仍然遇到同样的问题。
【问题讨论】:
如果有多种匹配方式,连接总是会添加额外的行。
这里,如果a 为 1,c 可以同时为 1 和 2。
在 id 列上使用distinct(这里:a)来获得一对多匹配之一:
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
df1 <- tibble(a = c(1,2), b = 2)
df1
#> # A tibble: 2 x 2
#> a b
#> <dbl> <dbl>
#> 1 1 2
#> 2 2 2
df2 <- tibble(a = c(1,1,2), c = c(1,2,3))
df2
#> # A tibble: 3 x 2
#> a c
#> <dbl> <dbl>
#> 1 1 1
#> 2 1 2
#> 3 2 3
left_join(df1,df2)
#> Joining, by = "a"
#> # A tibble: 3 x 3
#> a b c
#> <dbl> <dbl> <dbl>
#> 1 1 2 1
#> 2 1 2 2
#> 3 2 2 3
left_join(df1,df2) %>% distinct(a, .keep_all = TRUE)
#> Joining, by = "a"
#> # A tibble: 2 x 3
#> a b c
#> <dbl> <dbl> <dbl>
#> 1 1 2 1
#> 2 2 2 3
由reprex package (v2.0.1) 于 2021-12-02 创建
【讨论】: