如何在R中添加2D矩阵作为数据帧变量?

时间:2016-06-08 12:44:01

标签: r matrix dataframe

首先,我应该提一下,我昨天才开始研究R使用PLS库。我使用'R.matlab'库从MATLAB导入了我的数据。 我设法将一个矩阵很容易地插入到数据帧中,因为它是一维向量。它显示为

  

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-regression。

我希望我的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

2 个答案:

答案 0 :(得分: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 :(得分: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

那就是说在数据帧中嵌入矩阵是一个坏主意。