我有一个c.1100个单个字符向量的列表,每个向量对应于一组特定的基因(字符是以下形式的基因符号:例如“ ENSG000011”,“ ENSG000012”等。
我想将这些向量合并到单个data.frame / matrix中,以便列表中的每个项目都成为其自己的列。但是,列表中的每个项目都有不同的长度。
但是,我似乎找不到一种单一的方法。
我已经在R中尝试了多种方法,但是格式似乎从来都不是很正确(例如,它将列表的所有项目粘贴到另一行的另一行中,否则会出现错误,因为元素的长度不同)
答案 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