如何在 R 中的多列匹配条件下将一个文件与另一个文件合并

How to merge one file with another with conditions on match across multiple columns in R

我被困在 R 中看似可行的任务上。我正在合并几个文件,并且在维护数据时需要更改列的名称。可能有更好的方法来购买那是另一回事。但简单来说,我有两个文件 dfA 和 dfB,如下所示。我需要根据匹配项将 dfB 上的“模型”与“PART1”或“PART2”或“PART3”中的任一列合并。

我们可以做到以下几点:

  1. dfA转成长格式(注意参数values_transform的用法见这里:

  2. 然后在适当的列中使用 right_join 并做一些 select:

library(dplyr)
library(tidyr)

dfA %>% 
  pivot_longer(
    starts_with("PART"),
    names_to = "key",
    values_to = "val", 
    values_transform = list(val = as.character)
  ) %>% 
  right_join(dfB, by=c("val"="Model")) %>% 
  select(Model=val, Detail)
  Model Detail
  <chr> <chr> 
1 A     Dog   
2 2     Cat   
3 Z     Cow 

数据:

dfA <- tibble(PART1 = c("A", "B", "C"),
              PART2 = c("X", "Y", "Z"),
              PART3 = c(1,2,3),
              Detail = c("Dog", "Cat", "Cow"))

dfB <- tibble(Model = c("A", "Z", 2))

试试这个简单但不是理想的最佳方式:

 library("dplyr")
 dfC <- 
 union(
 union(
 left_join(dfB, dfA, by = c("Model" = "PART1")), 
 left_join(dfB, dfA, by = c("Model" = "PART2")) 
 ),
 left_join(dfB, dfA, by = c("Model" = "PART3"))
 )