【问题标题】:How to use left_join without adding additional rows R?如何在不添加额外行 R 的情况下使用 left_join?
【发布时间】:2022-01-08 20:22:21
【问题描述】:

我有两张桌子。第一个表有 206 206 行,第二个有 300 行。这样使用left_join 后:

final <- left_join(first, second, by="CATEGORY")

决赛桌有 223 201 行。我不明白为什么要添加额外的行。我最后需要有 206 206 行,只添加了额外的列。可能是什么问题?我尝试了inner_join,但我仍然遇到同样的问题。

【问题讨论】:

  • 请添加一些有代表性的样本数据。
  • 这可能与this post 帖子或this one 重复。
  • @Mata 我没有找到他们。谢谢

标签: r dataframe join dplyr


【解决方案1】:

如果有多种匹配方式,连接总是会添加额外的行。 这里,如果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 创建

【讨论】:

    猜你喜欢
    • 2022-07-01
    • 2012-09-06
    • 1970-01-01
    • 2019-10-01
    • 1970-01-01
    • 2019-12-18
    • 1970-01-01
    • 2016-12-20
    • 2017-07-03
    相关资源
    最近更新 更多