【问题标题】:Converting strings in list to numeric matrix将列表中的字符串转换为数值矩阵
【发布时间】:2016-03-07 06:56:06
【问题描述】:

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

> 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,等等。有什么建议么? 显然,在这段代码中,我可以轻松更改它,而我的实际代码无法更改输出。

【问题讨论】:

  • 请提供代码,否则我会对否决按钮感到愤怒。

标签: r list matrix


【解决方案1】:

我们可以循环遍历list,使用sub删除非数字字符并使用as.numeric转换为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)

或者如cmets中提到的@Jaap,使用sapply而不是lapply并转置输出

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

【讨论】:

  • 完美运行。谢谢。
  • t(sapply(MyList, function(x) as.numeric(sub("\\D+", '', x)))) 返回一个矩阵
  • 正如另一个建议,您可以像这样提取每个矩阵的第一个字母......只是为了给出想法。 mylist stackoverflow.com/questions/21138296/…
  • @InfiniteFlashChess 是的,或者如果它特定于首字母,则更快的选项是使用substr
  • @Joseph 你可以使用lapply(MyList, function(x) as.numeric(substr(x,2, nchar(x))))
猜你喜欢
  • 1970-01-01
  • 2014-01-14
  • 1970-01-01
  • 2017-02-06
  • 2017-11-21
  • 1970-01-01
  • 2021-12-29
  • 2021-10-11
  • 1970-01-01
相关资源
最近更新 更多