Какие есть лучшие способы разложить большой кадр данных в R? - PullRequest
1 голос
/ 29 октября 2011

Я хотел бы преобразовать фрейм данных с размерами 103740 x 4 в широкий формат, т. Е. Перейти от первого блока текста ниже ко второму.Следующая функция работает достаточно хорошо, когда применяется к части фрейма данных, но она исчерпывает доступную память моей машины, когда применяется к полному фрейму данных:

reshape(analysis1[1:8], idvar=c("name", "sire_name"), 
        timevar = "course", direction = "wide")[, -c(1,2)]  

Какие есть лучшие способы разложить этот фрейм данных?1004 *

           name sire_name        course appearance
1      A Beetoo   Bahhare       Kempton          0
2      A Beetoo   Bahhare     Lingfield          9
3      A Beetoo   Bahhare     Southwell          0
4      A Beetoo   Bahhare Wolverhampton          0
5 A Bid In Time  Danetime       Kempton          0
6 A Bid In Time  Danetime     Lingfield          3
7 A Bid In Time  Danetime     Southwell          2
8 A Bid In Time  Danetime Wolverhampton          2
...

  Kempton Lingfield Southwell Wolverhampton
1       0         9         0             0
5       0         3         2             2
...

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

1 Ответ

1 голос
/ 29 октября 2011

Если вы хотите, чтобы все было очень просто, то изменение формы в базе R было бы наиболее эффективным.Я просто сделал бы матрицу из внешнего вида, привел бы ее к типу data.frame и назвал бы столбцы.

newDF <- data.frame( matrix(oldDF$appearance, ncol = 4, byrow = TRUE) )
names(newDF) <- oldDF$course[1:4]

Теперь, если у вас нет фрейма, отсортированного так же, как выпредставил его и, возможно, даже имеет больше значений в столбце курса, следующее более надежно ...

oldDF <- oldDF[ order(oldDF$course), ]
s <- sort(unique(oldDF$course))
newDF <- data.frame( matrix(oldDF$appearance, ncol = length(s)) )
names(newDF) <- s

(вы можете добавить другие столбцы в функцию заказа, чтобы разорвать связи, если хотите)

Одним из больших преимуществ многих команд, которые можно использовать для изменения формы данных, является то, что они устойчивы к порядку данных, отсутствующим ячейкам и т. Д. Однако это также делает их, как правило, довольно медленными, когда выполучил прямое изменение формы для очень большого объекта data.frame.

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