2016-06-08 73 views
2

我正在尝试使用PLS库来运行偏最小二乘回归。我使用'R.matlab'库从MATLAB导入数据。 我的一个矩阵很容易插入数据框,因为它是一维矢量。它表现为如何在R中添加一个2D矩阵作为数据框变量?

my_1d_matrix ... NUM [1:205,1] 124 138 38 76 155 ...

我的其它基质然而是205x4096。它表明这样在我的工作区:

my_2d_matrix ...大名单(205元,6.5 MB)

我怎样才能插入此作为我在同一个数据帧第二个变量?

根据PLS introductory pdf,我看到他们使用的'汽油'数据集由'octane'(1d矢量)和'NIR'(2D大矩阵)组成,所以我想对我的数据做同样的处理。因此,我认为我应该有我的二维矩阵相同的格式如下:

> library(pls) 
> data(gasoline)  
> str(gasoline$NIR) 

是:

>AsIs [1:60, 1:401] -0.050193 -0.044227 -0.046867 -0.046705 -0.050859 ... 
- attr(*, "dimnames")=List of 2 
    ..$ : chr [1:60] "1" "2" "3" "4" ... 
    ..$ : chr [1:401] "900 nm" "902 nm" "904 nm" "906 nm" ... 

所以,最终的结果应该是类似“汽油”一个数据帧,其中所述第一变量是my_1d_matrix一个是my_2d_matrix

回答

1

当前您的数据被读入列表中,即您的2d矩阵和响应变量是矩阵。为了把两成数据帧,你可以尝试:

myData <- data.frame(y = my_1d_matrix) 
myMat <- matrix(0,205,4096) 
for(i in 1:205){ 
    myMat[i,] <- my_2d_matrix[[i]] 
} 
myData <- cbind(myData,myMat) 

现在,你应该能够调用plsr

myModel <- plsr(y ~ ., ncomp = 10, data = myData) 

的点.只是意味着使用所有的变量,因为没有在myData数据框中指定的名称可能具有数字名称。

如果这不起作用,那很可能是因为my_2d_matrix[[i]]包含的东西不仅仅是一个数字向量。

您可能想要指定数据框中变量的名称,第一列是响应,其余的是来自大型矩阵的。

+0

我得到“不正确的矩阵下标数”,指的是myMat [i,] < - my_2d_matrix [[i]]' – yannovios

+0

@kalfasyan输出:class(my_2d_matrix [[1]] )'和'dim(my_2d_matrix [[1]])'? – Gumeo

+0

它分别是''list“'和'NULL'。 [这里是my_2d_matrix的截图](http://imgur.com/sA3UATX) – yannovios

相关问题