从字符列表到矩阵/数据框的数字(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_list2matrix
将list
转换为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
非常感谢你:它的作品!你能解释一下你用来创建'最终'的最后一条命令吗? – fatoddsun
@fatoddsun,我已经添加了一些解释。 – A5C1D2H2I1M1N2O1R2T1