【问题标题】:Combining multiple character vectors of different lengths into single matrix without recycling [duplicate]将不同长度的多个字符向量组合成单个矩阵而不回收[重复]
【发布时间】:2019-10-03 23:29:42
【问题描述】:

我有一个 c.1100 个单独字符向量的列表,每个字符向量对应于一组特定的基因(字符是格式中的基因符号:例如“ENSG000011”、“ENSG000012”等。

我想将这些向量合并到单个 data.frame/matrix 中,以便列表中的每个项目成为自己的列。但是,列表中的每个项目都有不同的长度。

但是,我似乎找不到这样做的单一方法。

我在 R 中尝试了多种方法,但格式似乎从来都不是很正确(例如,它将列表中的所有项目粘贴在一行中,一个又一个,或者我得到一个错误,因为每个元素的长度不同)

【问题讨论】:

    标签: r


    【解决方案1】:

    使用 Base R 我们需要...

    首先让我们创建一个包含 4 个向量的示例数据集:

    a <- rnorm(10)
    b <- rnorm(5)
    c <- rnorm(7)
    d <- rnorm(20)
    

    然后我们可以将它们放在一个列表中:

    f <- list(a,b,c,d)
    

    那么我们需要找到最长向量的length

    max_len <- max(sapply(f, length))
    

    然后我们需要通过将NAs 替换为间隙来使所有向量成为max_len(因此,如果您有一个max_len = 20 并且当前向量只有length(current) = 10,那么您需要最后10 个值来是NA

    f1 <- lapply(f, function(x) c(x, rep(NA, max_len - length(x))))
    

    然后你可以把它变成一个矩阵:

    matrix(unlist(f1), ncol = length(f1), byrow = F)
    

    导致

                 [,1]       [,2]       [,3]       [,4]
     [1,] -0.53487289 -1.8570456  0.8304454 -0.6440267
     [2,]  0.04283173 -1.2541836  0.9579962 -1.1664334
     [3,] -1.31686110 -0.6789986  0.9424487  0.4073388
     [4,] -0.54987484 -0.4326257 -1.5165032  0.1990406
     [5,]  0.31529161 -0.2712977  0.1347272 -0.2479010
     [6,] -1.08465865         NA  0.7442857 -1.1319033
     [7,]  1.11283161         NA -0.8397640  0.2636702
     [8,]  0.08882676         NA         NA -0.1332037
     [9,]  0.76028752         NA         NA  0.1607880
    [10,] -2.68513818         NA         NA -2.3300150
    [11,]          NA         NA         NA -0.3356175
    [12,]          NA         NA         NA  0.8115210
    [13,]          NA         NA         NA  1.1668857
    [14,]          NA         NA         NA  0.5538027
    [15,]          NA         NA         NA -0.8910439
    [16,]          NA         NA         NA -1.4056796
    [17,]          NA         NA         NA -1.6713585
    [18,]          NA         NA         NA  0.2557690
    [19,]          NA         NA         NA -0.5970861
    [20,]          NA         NA         NA  0.1851019
    

    【讨论】:

    • 太棒了,这是一种享受。谢谢!
    • 你介意勾选我的答案吗?
    • 为您完成一切!
    猜你喜欢
    • 2017-12-13
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 2015-07-09
    • 2021-02-27
    • 2015-04-18
    • 1970-01-01
    相关资源
    最近更新 更多