Сплит-кадр данных по уровням фактора и именных кадров данных по этим уровням

Я хочу разбить существующий фрейм данных на уровни одной из факториальных переменных, так что имена разделенных данных будут соответствовать уровням фактора.

df <- data.frame(cbind(X = 1:10, Y = rnorm(10)), Z = sample(LETTERS[1:3], 10, replace = TRUE)) 

Если df является исходным фреймворком данных, я хочу разбить его на три блока данных A , B и C , например:

 A = subset(df, Z == 'A') B = subset(df, Z == 'B') ... 

Есть ли простой способ сделать это одним выстрелом? У меня огромный dataset, а факторная переменная имеет слишком много уровней.

Вы можете сделать это с plyr пакета plyr

 require(plyr) dlply(df, .(Z)) 

В базе R вы должны использовать функцию split . И split имеет метод по default и один для data.frame . Тем не менее, я обнаружил, что split.data.frame очень медленный, так как количество уровней для разделения становится огромным. То есть,

 # inefficient in my opinion split(df, df$Z) 

Вышеупомянутое решение даст вам имена, которые вы просите, а также напрямую, но будет подавляться на больших уровнях.

И если вы хотите торговать с помощью внешних пакетов для скорости / эффективности, я бы предложил использовать пакет data.table :

 require(data.table) dt <- data.table(df) oo <- dt[, list(list(.SD)), by = Z]$V1 names(oo) <- unique(dt$Z) 
 sapply( levels( df$Z ), function( x ) list( subset( df, Z == x ) ) ) 

Это вернет список с элементами, названными после уровней df $ Z, каждый из которых содержит подмножество df.

Ops, лучший ответ был предоставлен, но был удален – я поставлю решение здесь:

 split(df, df$Z) 
  • Найти ближайшее значение в векторе с бинарным поиском
  • Как вы кодируете функцию R так, чтобы она «знала», чтобы искать «данные» для переменных в других аргументах?
  • используя substitute для получения имени аргумента с помощью
  • Lapply для добавления столбцов в каждый Dataframe в списке
  • R усиливает местный охват
  • Измените class с коэффициента на числовое число столбцов в кадре данных
  • R: t-тест по всем столбцам
  • Отбор проб в R из вектора различной длины
  • Как мне назвать столбец имен строк в r
  • Как выбрать строку с максимальным значением в каждой группе
  • Матрица корреляции сюжетов в граф
  • Давайте будем гением компьютера.