2016-03-07 495 views
1

我有以下列表,我似乎无法将其转换为数字矩阵。将列表中的字符串转换为数字矩阵

> MyList 
[[1]] 
[1] "X4" "X3" "X2" "X5" 

[[2]] 
[1] "X5" "X2" "X4" "X3" 

[[3]] 
[1] "X4" "X3" "X2" "X5" 

我试过as.matrix(MyList),但仍然给了我一个带有字符串的矩阵。我试图完成的是一个带有数值的矩阵,所以“X4”变成了4,“X3”变成了3,等等。有什么建议么? 显然,在这段代码中,我可以很容易地改变它,用我的实际代码我不能改变输出。

+0

请提供代码,否则感到我的愤怒的向下投票按钮。 – InfiniteFlashChess

回答

3

我们可以通过list循环,使用sub删除非数字字符,并转换为numericas.numeric

lst <- lapply(MyList, function(x) as.numeric(sub("\\D+", '', x))) 
lst 
#[[1]] 
#[1] 4 3 2 5 

#[[2]] 
#[1] 5 2 4 3 

#[[3]] 
#[1] 4 3 2 5 

如果我们需要的是一个matrix,无论是

do.call(rbind, lst) 

或者像@Jaap在评论中提到的,使用sapply代替lapply和转输出

t(sapply(MyList, function(x) as.numeric(sub("\\D+", '', x)))) 
+1

完美地工作。谢谢。 – Joseph

+1

't(sapply(MyList,function(x)as.numeric(sub(“\\ D +”,'',x))))'给出一个矩阵 – Jaap

+1

正如另一个建议可以提取每个字母的第一个字母像这样的矩阵......只是为了给出想法。 MYLIST < - 列表( “X3”, “X8”, “X9”) mylist1 < - as.numeric(GSUB( “^ X”, '',MYLIST)) mylist1 [1] 3 8 9 来源: http://stackoverflow.com/questions/21138296/remove-first-character-from-a-string – InfiniteFlashChess