1

我正在尝试完成以下任务以获取矩阵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])
}

但也许有更好的方法。

4

1 回答 1

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 应用于因子并将格式应用于其他非字符列。

于 2013-11-10T12:47:53.257 回答