从字符列表到矩阵/数据框的数字(R)

问题描述:

我有一个很长的列表,其元素是包含字符向量的长度列表。这些载体可以有不同的长度。从字符列表到矩阵/数据框的数字(R)

向量的元素是'字符',但我想将它们转换为数字,因为它们实际上表示数字。

我想创建一个矩阵或数据框,其行是上面的向量,转换为数字。由于它们有不同的长度,每行的“右端”可以填充NA。

我想从库{plyr}中使用函数rbind.fill.matrix,但我唯一能得到的是一个长的数字一维数组,里面的所有数字都代替​​矩阵。

这是最好的我所能做得到的数值列表(DAT这是我最初的名单):

dat<-sapply(sapply(dat,unlist),as.numeric) 

如何我现在可以创建矩阵? 谢谢!

我会做这样的事情:

library(stringi) 
temp <- stri_list2matrix(dat, byrow = TRUE) 
final <- `dim<-`(as.numeric(temp), dim(temp)) 

的基本思想是:stri_list2matrixlist转换为matrix,但它仍然是一个字符矩阵。 as.numeric将消除矩阵的维度属性,所以我们在添加这些回:

`dim<-` ## Yes, the backticks are required -- or at least quotes 

POC:

dat <- list(1:2, 1:3, 1:2, 1:5, 1:6) 
dat <- lapply(dat, as.character) 

dat 
# [[1]] 
# [1] "1" "2" 
# 
# [[2]] 
# [1] "1" "2" "3" 
# 
# [[3]] 
# [1] "1" "2" 
# 
# [[4]] 
# [1] "1" "2" "3" "4" "5" 
# 
# [[5]] 
# [1] "1" "2" "3" "4" "5" "6" 

library(stringi) 
temp <- stri_list2matrix(dat, byrow = TRUE) 
final <- `dim<-`(as.numeric(temp), dim(temp)) 
final 
#  [,1] [,2] [,3] [,4] [,5] [,6] 
# [1,] 1 2 NA NA NA NA 
# [2,] 1 2 3 NA NA NA 
# [3,] 1 2 NA NA NA NA 
# [4,] 1 2 3 4 5 NA 
# [5,] 1 2 3 4 5 6 
+0

非常感谢你:它的作品!你能解释一下你用来创建'最终'的最后一条命令吗? – fatoddsun

+0

@fatoddsun,我已经添加了一些解释。 – A5C1D2H2I1M1N2O1R2T1