用R加3个二维矩阵
我在R中有三个二维矩阵,我想合并它们得到一个最终的数组。有没有可能在R中提供一个示例代码 具体来说,假设我有以下矩阵:用R加3个二维矩阵,r,matrix,R,Matrix,我在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
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
请注意,矩阵的维数不是固定的,但可以保证所有矩阵的大小都相同
对于矩阵4,我想给每个元素添加一个常量。那么矩阵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
完成后,我想将矩阵转换为列表
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
从更大的角度来看,我尝试的是,我有3个文件,其中数据通过矩阵中的位置链接。一旦数据链接如矩阵5所示完成,位置实际上并不重要,因为数据被附加在一起。我正在努力得到可以处理的最终结果 试试看
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"
或
要将“mNew”中的单个元素转换为列表元素
as.list(mNew)
数据
m1添加常量“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"
最终矩阵是3x3还是3x9?最终矩阵是3x3。分号是数据的一部分。@Vaya编辑了邮戳,我要求您在答案中再添加一项功能。对于最后的答案,我想给矩阵中的每个元素加一个常数,即,不是1;A.P它应该是X;1.A.P,而不是2:B;Q、 它应该是X;2:B;Q另外,最后的矩阵应该转换成一个列表,也就是说,我不再担心这个职位。我更新了这个问题,因为我在评论中无法解释同样的问题。对不起,有多重roundtrips@Vaya我猜您希望将单个元素转换为列表元素。因此,只要as.list(mNew)
就可以了。请检查更新,这是我要找的。多谢
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"
split(mNew, col(mNew))
split(mNew, row(mNew))
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))
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)