合并来自许多矩阵的选定列

时间:2013-11-10 12:23:56

标签: r data-binding matrix cbind

我正在尝试完成以下任务以获取矩阵d

d1<-matrix(as.factor(rep(sample(1:10,10,T),5)),ncol=5)
d2<-matrix(as.factor(rep(sample(1:10,10,T),5)),ncol=5)
d3<-matrix(as.factor(rep(sample(1:10,10,T),5)),ncol=5)

d<-cbind(
  cbind(d1[,2],d1[,5]),
  cbind(d2[,2],d2[,5]),
  cbind(d3[,2],d3[,5])
)

但对于许多矩阵d1 ... dn,比如说。

更一般地说,我想从一系列矩阵中选择相同的列号并附加到单个矩阵中。这项任务的重点是合并,而不是创建矩阵。应保留因子类型列向量。

我想到了

的内容
d<-matrix(nrow=10)
dl<-list(d1,d2,d3)
for (i in 1:3){
  d<-cbind(d,dl[[i]][,2],dl[[i]][,5])
}

但也许有更好的方法。

1 个答案:

答案 0 :(得分:3)

您可以创建list个矩阵并使用do.calllapply来获得您想要的内容:

matList <- list(d1, d2, d3)
do.call(cbind, lapply(matList, function(x) x[, c(2, 5)]))
#       [,1] [,2] [,3] [,4] [,5] [,6]
#  [1,] "3"  "3"  "3"  "3"  "10" "10"
#  [2,] "4"  "4"  "2"  "2"  "3"  "3" 
#  [3,] "6"  "6"  "7"  "7"  "7"  "7" 
#  [4,] "10" "10" "4"  "4"  "2"  "2" 
#  [5,] "3"  "3"  "8"  "8"  "3"  "3" 
#  [6,] "9"  "9"  "5"  "5"  "4"  "4" 
#  [7,] "10" "10" "8"  "8"  "1"  "1" 
#  [8,] "7"  "7"  "10" "10" "4"  "4" 
#  [9,] "7"  "7"  "4"  "4"  "9"  "9" 
# [10,] "1"  "1"  "8"  "8"  "4"  "4" 

顺便说一下,矩阵中的数据类型为character,而不是factor。请参阅?matrix的帮助页面,您可在其中找到以下内容:

  

如果只有原子列和任何非(数字/逻辑/复杂)列,将as.vector应用于因子并格式化为其他非字符列,则数据帧的方法将返回字符矩阵。