我有一个包含250张的excel文件(第一张包含250行和11列,第二张包含249行和11列,第三张包含248行和11列,依此类推)。我只需要所有工作表中第11列的值来创建对角矩阵。我想,首先我必须将第11列值从excel文件导入到R。基于这些值,我必须创建一个对角矩阵。请帮帮我
答案 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]
}
有很多方法可能会失败。显而易见的是索引超过表格中数据范围的末尾