2016-06-08 52 views
1

首先,我應該提到,我只是在昨天才開始研究R來使用PLS庫。我使用'R.matlab'庫從MATLAB導入數據。 我的一個矩陣很容易插入數據框,因爲它是一維矢量。它表現爲如何在R中添加一個2D矩陣作爲數據框變量?

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

所以,我這樣做:

> df <- data.frame(x = my_1d_matrix) 

我的其他但是矩陣是205x4096。它表明這樣在我的工作區:

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

我怎樣才能插入此作爲我在同一個數據幀第二個變量?實際上,我試圖從pls庫中複製汽油數據集,它的'辛烷'作爲一個變量,'NIR'(60x401矩陣)作爲第二個。然後很容易執行pls迴歸。

我希望我的205x4096矩陣是在相同的格式一個由下式給出:

> 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

+0

嘗試'as.data.frame(my_2d_matrix)' – Tgsmith61591

+0

對我來說,「變量」總是一個向量。如果你想保留'my_2d_matrix'的205x4096結構,那麼編寫'df2 < - data.frame(my_2d_matrix)'就足夠了。 – Qaswed

+0

請閱讀我編輯的最後一句話。我試過'new1 < - data.frame(x = my_1d_matrix,y = df2)'和'new2 < - data.frame(x = my_1d_matrix,y = as.data.frame(my_2d_matrix))'但是出現錯誤參數意味着不同的行數:205,4096 – yannovios

回答

1

當前你的數據被讀入一個列表,即你的2d矩陣和響應變量是一個矩陣。爲了把兩成數據幀,你可以嘗試:

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

現在,你應該能夠調用plsr

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

的點.只是意味着使用所有的變量,因爲沒有在myData數據框中指定的名稱可能具有數字名稱。

如果這不起作用,那很可能是因爲my_2d_matrix[[i]]包含的東西不僅僅是一個數字向量。

您可能想要指定數據框中變量的名稱,第一列是響應,其餘的是來自大型矩陣的。

+1

工作就像一個魅力。謝謝 – yannovios

0

要嵌入矩陣「原樣」的數據幀,你必須使用I

> dim(data.frame(x=1:3, y=array(1:9, c(3,3)))) 
[1] 3 4 
> dim(data.frame(x=1:3, y=I(array(1:9, c(3,3))))) 
[1] 3 2 
> data.frame(x=1:3, y=I(array(1:9, c(3,3))))$y 
    [,1] [,2] [,3] 
[1,] 1 4 7 
[2,] 2 5 8 
[3,] 3 6 9 

也就是說嵌入到數據幀中的矩陣是一個壞主意。

+0

爲什麼它確切地不好? pls數據集「汽油」正在使用這種嵌入式矩陣,並且有關於它的官方文檔。必須有辦法將「大列表」轉換爲矩陣。我試過'newdf < - data.frame(x = my_1d_matrix,y = I(my_2d_matrix))',但它將y變成了許多'list(c(3.12441,-5125125 ....))'項目。 – yannovios

+0

@kalfasyan是的,如果'my_2d_matrix'不是矩陣,那麼你必須首先將ot轉換爲矩陣,顯然,例如, '數組(unlist(my_2d_matrix),dim = ...)'。我說這是一個壞主意,因爲一些函數會假設數據框架的元素是向量,所以我會避免它,除非我有一個很好的理由。 –

相關問題