Как создать диагональную матрицу в R? - PullRequest
0 голосов
/ 18 августа 2011

У меня есть файл Excel, который содержит 250 листов (1-й лист содержит 250 строк и 11 столбцов, 2-й лист содержит 249 строк и 11 столбцов, 3-й лист содержит 248 строк и 11 столбцов и т. Д.).Мне нужны только значения 11-го столбца из всех листов для создания диагональной матрицы.Я думаю, сначала я должен импортировать значения 11-го столбца из файла Excel в R.На основании этих значений мне нужно создать диагональную матрицу.Пожалуйста, помогите мне

Ответы [ 3 ]

9 голосов
/ 09 сентября 2015

По какой-то странной причине запрос Google для «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
2 голосов
/ 18 августа 2011

Из того, что вы описываете, вы действительно хотите треугольную матрицу, и я покажу, как создать верхнюю треугольную матрицу:

Шаг 1: создайте матрицу для получения результатов:

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

Шаг 2: получить функцию для чтения n-го листа по n строкам в 11-м столбце

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]
         }

Есть много способов, которыми это может потерпеть неудачу.Очевидным является индексирование после конца диапазона данных, которые поступают с листов

2 голосов
/ 18 августа 2011

Вы можете использовать функцию Диагональ из библиотеки 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

(Примечание: Матрица должна быть явно импортирована с помощью вызова Library , хотя не установлена ​​отдельно, поскольку она, кажется, включена в установку R)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...