合并具有附加条件的两个表

Merging two tables with additional condition

我正在尝试合并两个数据框。

您可以在下面看到的第一个数据框

table1<-data.frame(type1=c("A","B","C","D"),
                   type2=c("AAA","BBB","CCC","DDD") ,
                   value=seq(1:4)
                    )
table1

第二个table你可以在下面看到

  table2<-data.frame(
                        type2=c("AAA","BBB","CCC","DDD","FFF","GGG"), 
                        A= seq(1:6),
                        B= seq(1:6),
                        C= seq(1:6),
                        D= seq(1:6),
                        F= seq(1:6),
                        G= seq(1:6)
                                )
    table2

现在我想加入 Table 1 和 Table 2,但要以特定的方式。因此,我想将 Table 1 中的列类型 1(例如 A、B、C 和 D)与 Table 2 中的相同列连接起来,条件是 Type 2 列在 [= 中相同34=] 1 和 Table 2.

下面你可以看到预期的输出

那么有人可以帮我怎么做吗?

如果你想 type2 中的 select 列基于 table1 中的 type1 尝试将 type1 作为字符串数组传递:

library(tidyverse)
table1 %>% left_join(table2, by='type2') %>% select(type2,c(table1$type1))

输出:

  type2 A B C D
1   AAA 1 1 1 1
2   BBB 2 2 2 2
3   CCC 3 3 3 3
4   DDD 4 4 4 4

这是一个基本的 R 方法:

table2[grepl(paste(paste(table1$type1, collapse = "|"), names(table2[1]), sep = "|"), colnames(table2))][c(1:nrow(table1)), ]
  type2 A B C D
1   AAA 1 1 1 1
2   BBB 2 2 2 2
3   CCC 3 3 3 3
4   DDD 4 4 4 4

另一个可能的解决方案:

library(tidyverse)

inner_join(table1, table2, by = "type2") %>% 
  select(type2, intersect(str_split(.$type2, "") %>% unlist, names(table2)[-1]))

#>   type2 A B C D
#> 1   AAA 1 1 1 1
#> 2   BBB 2 2 2 2
#> 3   CCC 3 3 3 3
#> 4   DDD 4 4 4 4