首页 > 解决方案 > 如何left_join()两个数据集,但仅从其中一个数据集中选择特定列?

问题描述

这是两个数据集:(这是假数据)

library(tidyverse)
myfruit <- tibble(fruit_name = c("apple", "pear", "banana", "cherry"),
                  number = c(2, 4, 6, 8))

fruit_info <- tibble(fruit_name = c("apple", "pear", "banana", "cherry"),
                     colour = c("red", "green", "yellow", "d.red"),
                     batch_number = c(4, 4, 4, 4),
                     type = c("gala", "conference", "cavendish", "bing"),
                     weight = c(10, 11, 12, 13),
                     age_days = c(20, 22, 24, 16))

> myfruit
# A tibble: 4 x 2
  fruit_name number
  <chr>       <dbl>
1 apple           2
2 pear            4
3 banana          6
4 cherry          8

> fruit_info
# A tibble: 4 x 6
  fruit_name colour batch_number type       weight age_days
  <chr>      <chr>         <dbl> <chr>       <dbl>    <dbl>
1 apple      red               4 gala           10       20
2 pear       green             4 conference     11       22
3 banana     yellow            4 cavendish      12       24
4 cherry     d.red             4 bing           13       16

我想使用该dplyr::left_join()函数来组合在一起myfruitfruit_info但我只想要来自fruit_info.

我知道我可以这样做:

new_myfruit <- left_join(myfruit, fruit_info, by = "fruit_name") %>%
  select(fruit_name, number, batch_number, type)

# OR

new_myfruit <- left_join(myfruit, fruit_info, by = "fruit_name") %>%
  select(-colour, -weight, -age_days)

但是如果我有更多的列fruit_info并且我必须在函数中输入许多列名,select()那将非常耗时。那么,有没有更有效的方法来做到这一点?

编辑:

我在网上看到了一些例子,你可以这样做:

new_myfruits  <- left_join(myfruit,
                           fruit_info %>% select(batch_number, type),
                           by = "fruit_name")

但我收到一条错误消息:

# Error: Join columns must be present in data.
#  x Problem with `fruit_name`.

有人知道我在做什么错吗?

我将不胜感激任何帮助 :)

标签: rselectdplyrleft-jointidyverse

解决方案


这是否有效:

> myfruit %>% left_join(
+   fruit_info %>% select(1,3,4)
+ )
Joining, by = "fruit_name"
# A tibble: 4 x 4
  fruit_name number batch_number type      
  <chr>       <dbl>        <dbl> <chr>     
1 apple           2            4 gala      
2 pear            4            4 conference
3 banana          6            4 cavendish 
4 cherry          8            4 bing      
> 

推荐阅读