2016-06-08 59 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

相關問題