2016-06-08 104 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 = ...)'。我说这是一个坏主意,因为一些函数会假设数据框架的元素是向量,所以我会避免它,除非我有一个很好的理由。 –

相关问题