将不同长度的多个字符向量组合到单个矩阵中而无需回收

时间:2019-05-16 16:15:05

标签: r

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

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

但是,我似乎找不到一种单一的方法。

我已经在R中尝试了多种方法,但是格式似乎从来都不是很正确(例如,它将列表的所有项目粘贴到另一行的另一行中,否则会出现错误,因为元素的长度不同)

1 个答案:

答案 0 :(得分:0)

使用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))

然后我们需要通过用max_len代替间隙来使所有向量成为NA(因此,如果您有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