Преобразуйте формат длиной 3 столбца в 1000 верхних (или нижних) треугольных матриц

#r #list #matrix

Вопрос:

Я хотел бы преобразовать три определенных столбца (фрейм данных) в тысячу верхних (или нижних) матриц по 8 признаков каждая в R. Каждая матрица записывается по строкам во фрейме данных. Это пример:

 Dataframe with 3 columns (and 12000 rows). From this I need to have 1000 matrices (triangular):  col1 col2 col3 row1 1 2 3  row2 2 3 4 row3 7 4 5 row4 1 4 5 row5 2 4 5 row6 3 4 5 . . . . . . . .  . . . .  row12000 1 6 9   

Мне нужно преобразовать их в 1000 матриц (треугольных) по 8 признаков в каждой и поместить их в список: Пример преобразования данных в фрейме данных в первую матрицу:

   trait 1 trait2 trait3 trait4 trait5 trait6 trait7 trait8 trait1: 1(row1 col1)  trait2: 2(row1 col2) 5(row3 col3)  trait3: 3(row1 col3) 1(row4 col1) 3(row6 col1)  trait4: 2(row2 col1) 4(row4 col2) 4(row6 col2) value  trait5: 3(row2 col3) 5(row4 col3) 5(row6 col3) value value  trait6: 4(row2 col3) 2(row5 col1) . value value value  trait7: 7(row3 col1) 4(row5 col2) . value value value value  trait8: 4(row3 col2) 5(row5 col3) . value value value value value    

Ответ №1:

  • Сверните по строкам значение матрицы df значение фрейма данных () в векторе ( all_values ).
  • Создайте группу из 36 значений и разделите их в списке.
  • Поместите каждое из 36 значений в нижнюю треугольную матрицу размером 8 Х 8 и получите список матриц.
 all_values lt;- c(t(df)) dummmy_matrix lt;- matrix(nrow = 8, ncol = 8,   dimnames = list(paste0('trait', 1:8), paste0('trait', 1:8)))  matrix_list lt;- lapply(split(all_values, ceiling(seq_along(all_values)/36)), function(x) {  dummmy_matrix[lower.tri(dummmy_matrix, diag = TRUE)] lt;- x  dummmy_matrix }) matrix_list  

Комментарии:

1. Спасибо. Я ломал голову, чтобы понять, как создать 1000 матриц. Я смог построить один, но не знал, как сделать 1000. Теперь я возьму список матриц и сделаю все матрицы симметричными. Я сделаю: symm lt;- function(m) { m[upper.tri(m)] lt;- t(m)[upper.tri(m)] m } а потом: final_matrix = (matrix_list,symm) .