R 交替、交织或交错两个矩阵

R 交替、交织或交错两个矩阵,r,matrix,alternating,R,Matrix,Alternating,我有两个矩阵,我想以交替的方式交织/交织/堆叠在彼此的上面/rbind ranks=1:3 names=c("Karl", "Klaus", "Mary") x <- cbind(ranks, names) universities=c("Cape Town", "London", "Berlin") y <- cbind(rep("", 3), universities) 我尝试了矩阵(rbind(x,y),ncol=2)(如果我有两个字符串,这似乎可以解决问题),但没有效果这

我有两个矩阵,我想以交替的方式交织/交织/堆叠在彼此的上面/rbind

ranks=1:3
names=c("Karl", "Klaus", "Mary")
x <- cbind(ranks, names)

universities=c("Cape Town", "London", "Berlin")
y <- cbind(rep("", 3), universities)

我尝试了
矩阵(rbind(x,y),ncol=2)
(如果我有两个字符串,这似乎可以解决问题),但没有效果

这里有两种选择

首先,假设我们必须从“x”和“y”开始,您可以尝试从“gdata”包中进行
interleave

其次,假设我们可以从“等级”、“名称”和“大学”开始,您可以使用base R,如下所示:

cbind(c(t(cbind(ranks, ""))), c(t(cbind(names, universities))))
#      [,1] [,2]       
# [1,] "1"  "Karl"     
# [2,] ""   "Cape Town"
# [3,] "2"  "Klaus"    
# [4,] ""   "London"   
# [5,] "3"  "Mary"     
# [6,] ""   "Berlin"

然而,更好的选择是使用类似于
melt
(来自“重塑2”或“data.table”)。这将允许您添加另一个变量,该变量指示值所代表的测量类型

library(data.table)
melt(data.table(ranks, names, universities), "ranks")
#    ranks     variable     value
# 1:     1        names      Karl
# 2:     2        names     Klaus
# 3:     3        names      Mary
# 4:     1 universities Cape Town
# 5:     2 universities    London
# 6:     3 universities    Berlin
或者,要匹配您想要的订购:

library(data.table)
setorder(melt(data.table(ranks, names, universities), "ranks"), ranks)[]
#    ranks     variable     value
# 1:     1        names      Karl
# 2:     1 universities Cape Town
# 3:     2        names     Klaus
# 4:     2 universities    London
# 5:     3        names      Mary
# 6:     3 universities    Berlin

矩阵(rbind(t(x),t(y)),ncol=2,byrow=TRUE)
转置!好主意。想把你的评论升级为一个答案吗?请随意写下来,嗯,这不是你想要的方式…不是说显而易见的,但你为什么要这样做?第2列现在将有两种不同类型的数据,没有指明它是什么类型的变量——只是假设模式总是“name,university”。我们必须从“x”和“y”开始吗?
library(data.table)
melt(data.table(ranks, names, universities), "ranks")
#    ranks     variable     value
# 1:     1        names      Karl
# 2:     2        names     Klaus
# 3:     3        names      Mary
# 4:     1 universities Cape Town
# 5:     2 universities    London
# 6:     3 universities    Berlin
library(data.table)
setorder(melt(data.table(ranks, names, universities), "ranks"), ranks)[]
#    ranks     variable     value
# 1:     1        names      Karl
# 2:     1 universities Cape Town
# 3:     2        names     Klaus
# 4:     2 universities    London
# 5:     3        names      Mary
# 6:     3 universities    Berlin