我想合并3个表:
B1_1 2 3 4 5
1 0.5 0.5 0 0
3 0.0 0.0 1 0
5 0.0 0.0 1 0
6 0.0 0.0 0 1
B1_1 2 3 4
1 0.25 0.25 0.50
3 0.50 0.50 0.00
5 0.00 0.00 1.00
6 0.00 0.00 1.00
B1_1 2 4 5
5 0.5 0.0 0.5
6 0.0 1.0 0.0
7 0.0 1.0 0.0
当我使用cbind()时,我得到一个错误,说矩阵的行数必须匹配。有没有一种方法可以合并它们,即使行数不匹配,同时保持B1_1列的顺序相同,因为它是(1,3,5,6)(1,3,5,6)和(5,6,7)?
谢谢!
也许你想要这样的东西:
library(dplyr)
library(purrr)
list(df1,df2,df3) %>% reduce(bind_rows)
输出:
B1_1 X2 X3 X4 X5
1 1 0.50 0.50 0.0 0.0
2 3 0.00 0.00 1.0 0.0
3 5 0.00 0.00 1.0 0.0
4 6 0.00 0.00 0.0 1.0
5 1 0.25 0.25 0.5 NA
6 3 0.00 0.50 0.0 NA
7 5 0.00 0.00 1.0 NA
8 6 0.00 0.00 1.0 NA
9 5 0.50 NA 0.0 0.5
10 6 0.00 NA 1.0 0.0
11 7 0.00 NA 1.0 0.0
数据df1 <- data.frame(B1_1 = c(1,3,5,6),
"2" = c(0.5,0, 0, 0),
"3" = c(0.5,0,0,0),
"4" = c(0,1,1,0),
"5" = c(0,0,0,1))
df2 <- data.frame(B1_1 = c(1,3,5,6),
"2" = c(0.25,0, 0, 0),
"3" = c(0.25,0.5,0,0),
"4" = c(0.5,0,1,1))
df3 <- data.frame(B1_1 = c(5,6,7),
"2" = c(0.5,0, 0),
"4" = c(0,1,1),
"5" = c(0.5,0,0))
可以将具有共享列的表连接在一起:
df1 <- data.frame(B1_1 = c(1,3,5,6), y = 1)
df2 <- data.frame(B1_1 = c(5,6,7), y = 1)
dplyr::full_join(df1, df2)
#> Joining, by = c("B1_1", "y")
#> B1_1 y
#> 1 1 1
#> 2 3 1
#> 3 5 1
#> 4 6 1
#> 5 7 1
在2022-05-17由reprex包(v2.0.0)创建
我们可以使用以下基本R选项,例如,Reduce
+merge
> Reduce(function(x,y) merge(x,y,all = TRUE), list(df1,df2,df3))
B1_1 X2 X4 X5 X3
1 1 0.25 0.5 NA 0.25
2 1 0.50 0.0 0.0 0.50
3 3 0.00 0.0 NA 0.50
4 3 0.00 1.0 0.0 0.00
5 5 0.00 1.0 0.0 0.00
6 5 0.50 0.0 0.5 NA
7 6 0.00 0.0 1.0 0.00
8 6 0.00 1.0 0.0 NA
9 6 0.00 1.0 NA 0.00
10 7 0.00 1.0 0.0 NA