我在R中有三个二维矩阵。我想合并它们以获得最终数组。是否可以帮助R?中的示例代码?
具体来说,让我们说我有以下矩阵:
Matrix 1
1; 2; 3;
4; 5; 6;
7; 8; 9;
Matrix 2
A; B; C;
D; E; F;
G; H; I;
Matrix 3
P; Q; R;
S; T; U;
V; W; X;
我希望看到的结果矩阵是:
Matrix 4
1;A;P 2;B;Q 3;C;R
4;D;S 5;E;T 6;F;U
7;G;V 8;H;W 9;I;X
请注意,矩阵的尺寸不固定,但保证所有矩阵的尺寸相同。
对于Matrix4,我想为每个元素添加一个常量。所以Matrix 5将是
Matrix 5
X;1;A;P X;2;B;Q X;3;C;R
X;4;D;S X;5;E;T X;6;F;U
X;7;G;V X;8;H;W X;9;I;X
完成后,我想将Matrix转换为列表
X;1;A;P
X;2;B;Q
X;3;C;R
X;4;D;S
X;5;E;T
X;6;F;U
X;7;G;V
X;8;H;W
X;9;I;X
Froma更大的图片,我尝试的是,我有3个文件,其中数据按矩阵中的位置链接。一旦数据链接完成,如Matrix 5所示,当数据附加在一起时,位置确实无关紧要。我试图获得可以处理的最终结果。
答案 0 :(得分:2)
尝试
do.call(cbind,lapply(seq_len(ncol(m1)),
function(i) paste(m1[,i], m2[,i], m3[,i], sep=';')))
# [,1] [,2] [,3]
#[1,] "1;A;P" "2;B;Q" "3;C;R"
#[2,] "4;D;S" "5;E;T" "6;F;U"
#[3,] "7;G;V" "8;H;W" "9;I;X"
或者
`dim<-`(do.call(paste,c(mget(paste0('m',1:3)), sep=';')), dim(m1))
# [,1] [,2] [,3]
#[1,] "1;A;P" "2;B;Q" "3;C;R"
#[2,] "4;D;S" "5;E;T" "6;F;U"
#[3,] "7;G;V" "8;H;W" "9;I;X"
或者
mNew <- m1
mNew[] <- do.call(sprintf, c(mget(paste0('m', 1:3)), fmt='%s;%s;%s'))
mNew
# [,1] [,2] [,3]
#[1,] "1;A;P" "2;B;Q" "3;C;R"
#[2,] "4;D;S" "5;E;T" "6;F;U"
#[3,] "7;G;V" "8;H;W" "9;I;X"
如果我们需要将一个常量(&#39; X&#39;)附加到&#39; mNew&#39;
的所有元素mNew[] <- paste("X", mNew, sep=';')
mNew
# [,1] [,2] [,3]
#[1,] "X;1;A;P" "X;2;B;Q" "X;3;C;R"
#[2,] "X;4;D;S" "X;5;E;T" "X;6;F;U"
#[3,] "X;7;G;V" "X;8;H;W" "X;9;I;X"
转换为&#39;列表&#39;不清楚。我们可以使用split
将元素拆分为&#39; row&#39;或者&#39;列&#39;,即
split(mNew, col(mNew))
split(mNew, row(mNew))
转换&#39; mNew&#39;中的各个元素列出元素,
as.list(mNew)
m1 <- t(matrix(1:9, ncol=3))
m2 <-t( matrix(LETTERS[1:9], ncol=3))
m3 <-t( matrix(LETTERS[16:24], ncol=3))
答案 1 :(得分:1)
添加常量“B”并返回条目列表:
m <- matrix(1:4, 2)
l <- list("B", m, m, m)
as.list(Reduce(function(m1, m2) paste(m1, m2, sep = ";"), l))
[[1]]
[1] "B;1;1;1"
[[2]]
[1] "B;2;2;2"
[[3]]
[1] "B;3;3;3"
[[4]]
[1] "B;4;4;4"
虽然我建议只使用
返回的向量Reduce(function(m1, m2) paste(m1, m2, sep = ";"), l)