如何在R中创建对角矩阵?

时间:2011-08-18 03:44:00

标签: r

我有一个包含250张的excel文件(第一张包含250行和11列,第二张包含249行和11列,第三张包含248行和11列,依此类推)。我只需要所有工作表中第11列的值来创建对角矩阵。我想,首先我必须将第11列值从excel文件导入到R。基于这些值,我必须创建一个对角矩阵。请帮帮我

3 个答案:

答案 0 :(得分:9)

由于一些奇怪的原因谷歌查询“r对角矩阵”指向我这个页面,因此我认为这里回答这个问题是合理的。

在R中执行此操作的最基本方法是使用函数diag:

diag(1, 4, 4)

给出:

     [,1] [,2] [,3] [,4]
[1,]    1    0    0    0
[2,]    0    1    0    0
[3,]    0    0    1    0
[4,]    0    0    0    1

答案 1 :(得分:2)

您可以使用 Matrix 库中的 对角线 功能;只需传递维度和值(这似乎是电子表格第11列中的内容):

> library(Matrix)
> v = Diagonal(n=5, x=5.5)
> v
  5 x 5 diagonal matrix of class "ddiMatrix"
       [,1] [,2] [,3] [,4] [,5]
  [1,]  5.5    .    .    .    .
  [2,]    .  5.5    .    .    .
  [3,]    .    .  5.5    .    .
  [4,]    .    .    .  5.5    .
  [5,]    .    .    .    .  5.5

(注意: Matrix 需要通过调用 Library 显式导入,但不单独安装,因为它似乎包含在R安装中)

答案 2 :(得分:2)

根据您的描述,您真的想要一个三角矩阵,我将展示如何创建一个上三角矩阵:

步骤1:创建一个矩阵以接收结果:

mat <- matrix(NA, ncol=250, nrow=250)

步骤2:获取一个函数来读取第n页的第11列中的n行

require(gdata) # to get read.xls or use an equivalent that works with your unstated OS
               # you do need a Perl interpreter and a proper .pm file

步骤3:循环250张并放入矩阵行

for(idx in 1:250 ) { 
   intemp <- read.xls(xlsfilename, sheet = idx )
   mat[ idx, (251-idx):250] <- intemp[1:idx, 11]
         }

有很多方法可能会失败。显而易见的是索引超过表格中数据范围的末尾