我有以下列表,我似乎无法将其转换为数字矩阵。
> 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 :(得分:2)
我们可以遍历list
,使用sub
删除非数字字符,然后使用numeric
转换为as.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))))