如何在 R 中的多列匹配条件下将一个文件与另一个文件合并
How to merge one file with another with conditions on match across multiple columns in R
我被困在 R 中看似可行的任务上。我正在合并几个文件,并且在维护数据时需要更改列的名称。可能有更好的方法来购买那是另一回事。但简单来说,我有两个文件 dfA 和 dfB,如下所示。我需要根据匹配项将 dfB 上的“模型”与“PART1”或“PART2”或“PART3”中的任一列合并。
我们可以做到以下几点:
把dfA
转成长格式(注意参数values_transform
的用法见这里:
然后在适当的列中使用 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"))
)
我被困在 R 中看似可行的任务上。我正在合并几个文件,并且在维护数据时需要更改列的名称。可能有更好的方法来购买那是另一回事。但简单来说,我有两个文件 dfA 和 dfB,如下所示。我需要根据匹配项将 dfB 上的“模型”与“PART1”或“PART2”或“PART3”中的任一列合并。
我们可以做到以下几点:
把
dfA
转成长格式(注意参数values_transform
的用法见这里:然后在适当的列中使用
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"))
)