我有一个很长的列表,其元素是包含字符向量的长度为1的列表。这些载体可以有不同的长度。
向量的元素是'字符',但我想用数字转换它们,因为它们实际上代表数字。
我想创建一个矩阵或数据框,其行是上面的向量,转换为数字。由于它们具有不同的长度,因此每行的“右端”可以用NA填充。
我正在尝试使用库{plyr}中的函数rbind.fill.matrix,但我唯一能得到的是一个长数字1-d数组,其中包含所有数字,而不是矩阵。
这是我能做的最好的数字列表(这里的数据是我的原始列表):
dat<-sapply(sapply(dat,unlist),as.numeric)
我现在如何创建矩阵? 谢谢!
答案 0 :(得分:2)
我会做类似的事情:
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