R 按标识符列组合列表中的矩阵
该问题试图通过列标识符将集合中的矩阵连接起来。 我们可以用以下形式表示问题: 设置R 按标识符列组合列表中的矩阵,r,list,function,merge,R,List,Function,Merge,该问题试图通过列标识符将集合中的矩阵连接起来。 我们可以用以下形式表示问题: 设置 mat1您可以在Reduce out <- Reduce(function(x, y) merge(x, y, by = "Code", all = TRUE), mat_set) colnames(out) <- paste0("x", seq_along(out)) out # x1 x2 x3 x4 x5 x6
mat1您可以在Reduce
out <- Reduce(function(x, y) merge(x, y, by = "Code", all = TRUE), mat_set)
colnames(out) <- paste0("x", seq_along(out))
out
# x1 x2 x3 x4 x5 x6 x7 x8 x9
#1 1 0.4291247 -0.5644520 NA NA NA NA -0.8553646 -0.5238281
#2 2 0.5060559 -0.8900378 -0.9111954 -0.4405479 NA NA -0.2806230 -0.4968500
#3 3 -0.5747400 -0.4771927 -0.8371717 0.4595894 NA NA -0.9943401 -1.8060313
#4 4 -0.5466319 -0.9983864 2.4158352 -0.6937202 NA NA -0.9685143 -0.5820759
#5 5 NA NA 0.1340882 -1.4482049 NA NA -1.1073182 -1.1088896
#6 6 NA NA -0.4906859 0.5747557 1.1022975 -0.5012581 -1.2519859 -1.0149620
#7 7 NA NA NA NA -0.4755931 -1.6290935 NA NA
#8 8 NA NA NA NA -0.7094400 -1.1676193 NA NA
Reduce(function(x, y) merge(x, y, by = "Code", all = TRUE), mat_set)
然后我们可以使用Reduce
out <- Reduce(function(x, y) merge(x, y, by = "Code", all = TRUE), mat_set)
colnames(out) <- paste0("x", seq_along(out))
out
# x1 x2 x3 x4 x5 x6 x7 x8 x9
#1 1 0.4291247 -0.5644520 NA NA NA NA -0.8553646 -0.5238281
#2 2 0.5060559 -0.8900378 -0.9111954 -0.4405479 NA NA -0.2806230 -0.4968500
#3 3 -0.5747400 -0.4771927 -0.8371717 0.4595894 NA NA -0.9943401 -1.8060313
#4 4 -0.5466319 -0.9983864 2.4158352 -0.6937202 NA NA -0.9685143 -0.5820759
#5 5 NA NA 0.1340882 -1.4482049 NA NA -1.1073182 -1.1088896
#6 6 NA NA -0.4906859 0.5747557 1.1022975 -0.5012581 -1.2519859 -1.0149620
#7 7 NA NA NA NA -0.4755931 -1.6290935 NA NA
#8 8 NA NA NA NA -0.7094400 -1.1676193 NA NA
Reduce(function(x, y) merge(x, y, by = "Code", all = TRUE), mat_set)
看见使用list
而不是c
创建列表。mat\u set%>%reduce(full\u join,by=“code”)将起作用。建议在合并前重命名列,以避免上述代码给出的警告。
set.seed(1234)
mat1 <- setNames(data.frame(matrix(nrow=4, ncol =3, rnorm(12,0,1))), c("Code", "x1", "x2"))
mat2 <- setNames(data.frame(matrix(nrow =5, ncol=3, rnorm(15,0,1))), c("Code", "x3", "x4"))
mat3 <- setNames(data.frame(matrix(nrow=3, ncol =3, rnorm(9,0,1))), c("Code", "x5", "x6"))
mat4 <- setNames(data.frame(matrix(nrow =6, ncol =3, rnorm(18,0,1))), c("Code", "x7", "x8"))
mat1$Code <- c(1,2,3,4)
mat2$Code <- c(2,3,4,5,6)
mat3$Code <- c(6,7,8)
mat4$Code <- c(1,2,3,4,5,6)
mat_set <- list(mat1, mat2, mat3, mat4)
Reduce(function(x, y) merge(x, y, by = "Code", all = TRUE), mat_set)