合并具有附加条件的两个表
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
我正在尝试合并两个数据框。
您可以在下面看到的第一个数据框
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