Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 按标识符列组合列表中的矩阵_R_List_Function_Merge - Fatal编程技术网

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)