2015-05-09 71 views
1

我有一個很長的列表,其元素是包含字符向量的長度列表。這些載體可以有不同的長度。從字符列表到矩陣/數據框的數字(R)

向量的元素是'字符',但我想將它們轉換爲數字,因爲它們實際上表示數字。

我想創建一個矩陣或數據框,其行是上面的向量,轉換爲數字。由於它們有不同的長度,每行的「右端」可以填充NA。

我想從庫{plyr}中使用函數rbind.fill.matrix,但我唯一能得到的是一個長的數字一維數組,裏面的所有數字都代替​​矩陣。

這是最好的我所能做得到的數值列表(DAT這是我最初的名單):

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

如何我現在可以創建矩陣? 謝謝!

回答

2

我會做這樣的事情:

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