【问题标题】:Combine selected columns from many matrices合并来自多个矩阵的选定列
【发布时间】:2013-11-10 12:23:55
【问题描述】:

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

但也许有更好的方法。

【问题讨论】:

    标签: r data-binding matrix cbind


    【解决方案1】:

    您可以为您的矩阵创建一个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 应用于因子并将格式应用于其他非字符列。

    【讨论】:

    • 完美,谢谢。我还不熟悉 do.call 操作。在这里学习一些东西。
    猜你喜欢
    • 2015-03-26
    • 2011-02-12
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-21
    • 1970-01-01
    • 2018-05-03
    相关资源
    最近更新 更多