【问题标题】:column vectors to matrix in RR中的列向量到矩阵
【发布时间】:2013-01-31 11:19:32
【问题描述】:

我有一组向量V_1, V_2, ..., V_n,我想将其转换为矩阵。每个向量都成为矩阵中的一个列向量。每个向量的大小是相同的。有一个简单的功能可以做到这一点吗?在The R Book 的矩阵部分中,该函数似乎不存在。

我目前正在做的是:

mat=matrix(c(V1, V2, ..., VN), nrow=length(V1))
  1. 是否有某种矩阵追加函数可以将列追加到矩阵的末尾?

编辑: 最终目标是使用此矩阵执行k-means 聚类。我的向量名称实际上不是V_1, V_2, ..., V_n。向量的名称是对应于数据来源的文件名的子字符串(这是一个 1-1 映射)。最终,我将遍历特定目录中的所有文件,将数据提取到一个向量中,然后将每个列向量附加到一个矩阵中。

【问题讨论】:

  • 您的向量的命名方式是否有押韵或原因,它们是字面上的 V1 ... VN 吗?这里的另一种解决方案是 cbind,但您仍然必须为每个向量命名。
  • 我的向量没有命名为 $V_1,\ldots,V_n$ 但是,我的向量的名称有些押韵或原因,因为它们将是数据来的文件名的子字符串来自。
  • 仅供参考,您的数据结构和所需结构非常简单且易于描述,无需了解统计信息。所以,你的问题最好在 * 上提出。现在你不需要做任何事情。如果有足够多的其他社区成员同意我的评估,它将被迁移。
  • 我更喜欢您的原始方法,而不是一些更复杂的方法。但是你可以做不同的一件小事:你可以使用 ncol=N 代替 nrow=length(V1),其中 N 是向量的数量。

标签: r matrix k-means


【解决方案1】:

可以为您工作的命令是: sapply(ls(pattern="V[[:digit:]]"),get) 其中 pattern 中的参数是一个正则表达式,它匹配你想要的向量(并且只有你想要的向量)。或者,假设向量是从某些文件名的子字符串命名的,我假设您可以创建一个字符向量,其中每个向量名称作为一个元素。如果是这样,您可以将 ls 命令替换为该向量。

编辑:按列附加的矩阵将是 cbind(列绑定)。例如:

V1 <- rnorm(20)
V2 <- rnorm(20)
V3 <- rnorm(20)
mat <- matrix(c(V1,V2),nrow=length(V1))
(mat.app <- cbind(mat,V3))

【讨论】:

  • (mat.app &lt;- cbind(mat, V3)) 在一个向量上运行它时有效,但是当我通常在循环中应用它时,垫子不会改变。有什么想法吗?
  • 嗯...正在改变的是 mat.app 而不是 mat。因此,在您的循环中,您需要确保以相同的名称存储新的垫子,以便稍后用作 cbind 中的参数。例如。 mat
  • 您可以使用do.call("cbind", lapply(ls(pattern="V[[:digit:]]"), get)) 自动执行cbind 的最后一步 - 处理向量。
最近更新 更多