R 交替、交织或交错两个矩阵
我有两个矩阵,我想以交替的方式交织/交织/堆叠在彼此的上面/rbindR 交替、交织或交错两个矩阵,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)(如果我有两个字符串,这似乎可以解决问题),但没有效果这
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