итеративно построенный фрейм данных в R - PullRequest
12 голосов
/ 27 октября 2010

Я относительно новичок в R, и мне был интересен наиболее эффективный способ итеративного построения кадра данных (по одной строке за раз, количество итераций "n" и длина каждой строки "l" заранее известны).

  1. Создание пустого кадра данных, добавление строки для каждой итерации
  2. Предварительное выделение кадра данных nxl, изменение строки для каждой итерации
  3. Предварительное выделение матрицы nxl, изменение строки для каждой итерации,сделать фрейм данных из матрицы
  4. что-то еще

Ответы [ 2 ]

16 голосов
/ 27 октября 2010

Предварительно распределить !!!

И использовать matrix, если все данные одного типа.Это будет намного быстрее, чем data.frame.

Например:

> n <- 1000      # Number of rows
> row <- 1:20*1  # one row
> 
> # Adding row, one-by-one
> Data <- data.frame()
> system.time(for(i in 1:n) Data <- rbind(Data,row))
   user  system elapsed 
   2.18    0.00    2.18 
> 
> # Pre-allocated data.frame
> Data <- as.data.frame(Data)
> system.time(for(i in 1:n) Data[i,] <- row)
   user  system elapsed 
   0.94    0.00    0.93
>
> # Pre-allocated matrix (fast!)
> Data <- as.matrix(Data)
> system.time({ for(i in 1:n) Data[i,] <- row; Data <- as.data.frame(Data) })
   user  system elapsed 
      0       0       0 
1 голос
/ 28 октября 2010

Как насчет того, чтобы предварительно выделить какие-либо типы столбцов из списка в первую очередь?

as.data.frame (список (a1 = вектор ("число", n), a2 = вектор ("символ", n)))

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