从字符列表到数字(R)

时间:2015-05-09 09:59:09

标签: r list matrix rbind

我有一个很长的列表,其元素是包含字符向量的长度为1的列表。这些载体可以有不同的长度。

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

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

我正在尝试使用库{plyr}中的函数rbind.fill.matrix,但我唯一能得到的是一个长数字1-d数组,其中包含所有数字,而不是矩阵。

这是我能做的最好的数字列表(这里的数据是我的原始列表):

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

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

1 个答案:

答案 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