Разделить информационный кадр по количеству строк - PullRequest
22 голосов
/ 15 августа 2011

У меня есть фрейм данных, состоящий из 400 000 строк и около 50 столбцов. Поскольку этот массив данных настолько велик, он слишком сложен для вычислений, чтобы работать с ним. Я хотел бы разбить этот фрейм данных на более мелкие, после чего я буду запускать функции, которые я хотел бы запустить, а затем пересобрать фрейм данных в конце.

Нет группирующей переменной, которую я хотел бы использовать для разделения этого фрейма данных. Я просто хотел бы разделить его на количество строк. Например, я хотел бы разбить эту таблицу на 400 000 строк на 400 фреймов данных на 1000 строк. Как я могу это сделать?

1 Ответ

30 голосов
/ 15 августа 2011

Создайте собственную группирующую переменную.

d <- split(my_data_frame,rep(1:400,each=1000))

Также следует учитывать функцию ddply из пакета plyr или функцию group_by() из dplyr.

отредактировано для краткости после комментариев Хэдли.

Если вы не знаете, сколько строк в фрейме данных, или если фрейм данных может быть неравной длины по желаемому размеру порции, вы можете сделать

chunk <- 1000
n <- nrow(my_data_frame)
r  <- rep(1:ceiling(n/chunk),each=chunk)[1:n]
d <- split(my_data_frame,r)

Вы также можете использовать

r <- ggplot2::cut_width(1:n,chunk,boundary=0)

Для будущих читателей методы, основанные на пакетах dplyr и data.table, вероятно, будут (намного) быстрее выполнять групповые операции над фреймами данных.

...