R добавляет строки из перечисленных матриц в матрицу / фрейм данных, пропуская пропущенные значения - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь найти способ написать цикл (или функцию, похожую на применение), которая берет конкретную строку из матрицы в списке, записывает ее в кадр матрицы / данных, берет соответствующую строку изследующий элемент списка и помещает его после предыдущего в той же строке.

Это включает в себя вложенный список, который имеет пять матриц в первой части, пять в следующей части и так далее.Каждый кусок матрицы может варьироваться по количеству столбцов с минимумом шесть и максимум восемь.Всегда есть четыре ряда.В приведенном ниже примере матрицы 4x6 в первой части и матрицы 4x8 во второй части.

set.seed(100)
test.df <- data.frame(matrix(1:440,nrow=40,ncol=11))

mat1 <- matrix(rnorm(24),nrow=4,ncol=6)
mat2 <- matrix(rnorm(24),nrow=4,ncol=6)
mat3 <- matrix(rnorm(24),nrow=4,ncol=6)
mat4 <- matrix(rnorm(24),nrow=4,ncol=6)
mat5 <- matrix(rnorm(24),nrow=4,ncol=6)

mat6 <- matrix(rnorm(32),nrow=4,ncol=8)
mat7 <- matrix(rnorm(32),nrow=4,ncol=8)
mat8 <- matrix(rnorm(32),nrow=4,ncol=8)
mat9 <- matrix(rnorm(32),nrow=4,ncol=8)
mat10 <- matrix(rnorm(32),nrow=4,ncol=8)

test.list1 <- list(mat1,mat2,mat3,mat4,mat5)
test.list2 <- list(mat6,mat7,mat8,mat9,mat10)
list.f <- list(test.list1,test.list2)
res.mat <- matrix(nrow=2,ncol=40)

# (Edit) Example of expected results
res.mat[1,1:6] <- mat1[1,]
res.mat[1,9:14] <- mat2[1,]
res.mat[2,1:8] <- mat6[1,]
res.mat[2,9:16] <- mat7[1,]
res.mat
final.res <- cbind(test.df,res.mat)
final.res

Первая строка каждой матрицы в первом списке вложенного списка занимает первую строку res.mat.В первом ряду res.mat будет шесть записей, пропущены два столбца (оставляя NA), а затем следующие шесть записей и так далее.Во второй строке res.mat будет восемь записей, затем следующие восемь и так далее.После заполнения res.mat я добавлю его в test.df в качестве окончательного результата.test.df заполнен серией чисел в качестве заполнителей.

У меня более двух элементов списка более высокого уровня, но для воспроизводимости я включил только два.Когда он обрабатывает все мои данные, в конечном кадре данных будет 2916 элементов списка и 2916 строк.Буду очень признателен за любые идеи о том, как мне это сделать, и, пожалуйста, спросите, могу ли я что-нибудь уточнить с помощью кода или описания.

1 Ответ

0 голосов
/ 25 октября 2018

В случае, если кому-то интересно, я понял это.Вот решение:

format.dv <- function(list.f,test.df) {
nrow.f <- length(dvs)
  res.mat <- matrix(nrow=nrow.f,ncol=40)
  for (cond in 1:nrow(cond.list)) {
    ri <- 1
    min <- 1

    for (ri in 1:5) {

      data <- list.f[[cond]][[ri]]
      ncol <- dim(data)[2]
      adj <- 8 - ncol
      max <- 8
#Any number can be substituted for 1 depending on desired row to be taken
      pe.row <- data[1,]
      res.mat[cond,min:((max*ri)-adj)] <- pe.row
      min <- min+8
    }
  }
  res.mat <- round(res.mat,4)
  final.res <- cbind(test.df,res.mat)
  final.res
}
...