R语言semi_join(),anti_join(),nest_join()函数

Filtering joins filter rows from x based on the presence or absence of matches in y:

semi_join() return all rows from x with a match in y.

anti_join() return all rows from x without a match in y.

# "Filtering" joins keep cases from the LHS
band_members %>% semi_join(band_instruments)
#> Joining, by = "name"
#> # A tibble: 2 x 2
#>   name  band   
#>   <chr> <chr>  
#> 1 John  Beatles
#> 2 Paul  Beatles
band_members %>% anti_join(band_instruments)
#> Joining, by = "name"
#> # A tibble: 1 x 2
#>   name  band  
#>   <chr> <chr> 
#> 1 Mick  Stones

semi_join只返回x表格中中可以跟y表格匹配的行,anti_join返回x表格中与y表格不匹配的行。

nest_join() returns all rows and columns in x with a new nested-df column that contains all matches from y. When there is no match, the list column is a 0-row tibble.

nest_join()类似left_join(),返回的形式不一样。

band_members %>% nest_join(band_instruments)
#> Joining, by = "name"
#> # A tibble: 3 x 3
#>   name  band    band_instruments
#>   <chr> <chr>   <list>          
#> 1 Mick  Stones  <tibble [0 × 1]>
#> 2 John  Beatles <tibble [1 × 1]>
#> 3 Paul  Beatles <tibble [1 × 1]>

nest_join之后,band_instruments的结果打印出来

[[1]]
# A tibble: 0 x 1
# … with 1 variable: plays <chr>

[[2]]
# A tibble: 1 x 1
  plays 
  <chr> 
1 guitar

[[3]]
# A tibble: 1 x 1
  plays
  <chr>
1 bass 

对比left_join

> band_members %>% left_join(band_instruments)
Joining, by = "name"
# A tibble: 3 x 3
  name  band    plays 
  <chr> <chr>   <chr> 
1 Mick  Stones  NA    
2 John  Beatles guitar
3 Paul  Beatles bass 
原文地址:https://www.cnblogs.com/yaos/p/14016311.html