【发布时间】:2018-06-17 13:27:41
【问题描述】:
我有一个 m*n 矩阵的数据。我想按列拆分矩阵并将每一列分别保存在不同的向量中。 例如
data<-matrix(1:9, ncol=3)
我想让vec1 包含第一列所以
vec1将转置[1,2,3],一个维度为 3*1 的列矩阵,基本上是第一列数据。同样,vec2代表第二列,vec3代表最后一列。
我知道我可以通过重复手动执行此操作
vec1<-data[,1],
vec2<-data[,2]
...
vecn<-data[,n].
但是,当 n 很大时,这是不可行的。 所以我想知道使用循环来做到这一点是否可行。
【问题讨论】:
-
欢迎来到 StackOverflow!请阅读有关how to ask a good question 的信息以及如何提供reproducible example。这将使其他人更容易帮助您。
-
这是一个非常糟糕的想法——顺序命名的变量比一个好的矩阵更难处理。它们不能很好地扩展,它们经常导致复制/粘贴和查找/替换由拼写错误引起的错误......你为什么要这样做?更大的问题是什么?使用
list是将它们保存在单个对象中的好方法,以防矩阵不合适。您可能想阅读How do I make a list of data frames 进行相关讨论。 -
@Gregor 感谢您的评论。我正在做一个项目,使用前 10 秒的数据确定下一秒对象的位置。物体的位置由 10 个关节确定,每个关节有 3 个坐标。因此,我需要对所有 30 个坐标进行预测才能得到预测。所以我打算用30个变量代表30个坐标,循环从数据清洗到建模的所有过程。
-
我认为如果您使用单个矩阵或单个列表来保存所有 30 个坐标,您的代码结构会容易得多。使用
apply函数对矩阵的列进行循环进行了高度优化 - 您将增加代码的复杂性并通过从矩阵中取出变量来降低效率。与矩阵相比,data.frames特别慢。 -
而且,我应该补充一点,即使您需要将它们作为数据框插入到其他功能中,您也可以只使用
apply(your_matrix, 2, function(x) other_function(data.frame(X1 = x)))而不会用n单列数据框弄乱您的工作区.