Эмулировать split () с dplyr group_by: вернуть список кадров данных

У меня есть большой dataset, который дросселирует split() в R. Я могу использовать dplyr group_by (что является предпочтительным способом в любом случае), но я не могу сохранить результирующий grouped_df как список фреймов данных, формат, необходимый для моих последовательных (мне нужно принуждать к SpatialDataFrames и тому подобное).

рассмотрите образец набора данных:

 df = as.data.frame(cbind(c("a","a","b","b","c"),c(1,2,3,4,5), c(2,3,4,2,2))) listDf = split(df,df$V1) 

возвращается

 $a V1 V2 V3 1 a 1 2 2 a 2 3 $b V1 V2 V3 3 b 3 4 4 b 4 2 $c V1 V2 V3 5 c 5 2 

Я хотел бы подражать этому с помощью group_by (что-то вроде group_by(df,V1) ), но это возвращает один, grouped_df . Я знаю, что do должно мне помочь, но я не уверен в использовании (также см. Ссылку для обсуждения).

Обратите внимание, что разделение имен каждого списка по имени фактора, который использовался для создания этой группы – это желаемая функция (в конечном счете, бонусная наgradleа за способ извлечения этих имен из списка dfs).

Чтобы «придерживаться» dplyr, вы также можете использовать plyr вместо split :

 library(plyr) dlply(df, "V1", identity) #$a # V1 V2 V3 #1 a 1 2 #2 a 2 3 #$b # V1 V2 V3 #1 b 3 4 #2 b 4 2 #$c # V1 V2 V3 #1 c 5 2 

Сравнивая базовые, plyr и dplyr решения, по-прежнему кажется, что база намного быстрее!

 df <- data_frame(Group1=rep(LETTERS, each=1000), Group2=rep(rep(1:10, each=100),26), Value=rnorm(26*1000)) library(plyr) library(dlyr) library(dlyr) microbenchmark(Base=df %>% split(.$Group2, .$Group1), dplyr=df %>% group_by(Group1, Group2) %>% do(data = (.)) %>% select(data) %>% lapply(function(x) {(x)}) %>% .[[1]], plyr=dlply(df, c("Group1", "Group2"), as.tbl), times=50) 

дает:

 Unit: milliseconds expr min lq mean median uq max neval Base 1.898213 1.977818 2.056877 2.032882 2.077582 2.729119 50 dplyr 30.967926 31.502983 33.289824 32.029863 33.135550 48.245150 50 plyr 47.702301 49.033336 51.915533 50.961585 54.407141 65.961197 50 

Вы можете получить список фреймов данных из group_by используя do если вы group_by новый столбец, в котором будут храниться кадры данных, а затем будет lapply этот столбец.

 listDf = df %>% group_by(V1) %>% do(vals=data.frame(.)) %>% select(vals) %>% lapply(function(x) {(x)}) listDf[[1]] #[[1]] # V1 V2 V3 #1 a 1 2 #2 a 2 3 #[[2]] # V1 V2 V3 #1 b 3 4 #2 b 4 2 #[[3]] # V1 V2 V3 #1 c 5 2 
  • Сканер против StringTokenizer против String.Split
  • Извлечение пар слов с помощью String.split ()
  • Почему в Java 8 split иногда удаляет пустые строки при начале массива результатов?
  • Разделение строки Mysql
  • Разделить строку на массив в Bash
  • Почему StringTokenizer устарел?
  • Как разбить String на некоторый разделитель, но не удаляя этот разделитель в Java?
  • Как strtok () разбивает строку на токены в C?
  • Как подмножество кадра данных в фактор и повторить график для каждого подмножества?
  • Разделить строку на подстроки равной длины в Java
  • Как сделать токенизацию строки в C ++?
  • Interesting Posts

    Mac Mini не загружается и не будет исправлять

    Как вы сравниваете две строки версии в Java?

    Могут ли два пользователя одновременно делиться одним ПК

    Как вы используете конструктор, отличный от стандартного для члена?

    Установка Inno Установка изображения / управления на пользовательской странице

    Использование знаковых шрифтов в качестве маркеров в Картах Google V3

    сюжеты, создаваемые «сюжет» и «ggplot» бок о бок

    Spring Boot Настройка и использование двух источников данных

    DVI-D и DVI-I: отличное качество цифрового видео?

    В чем разница между Float: left vs Display: inline? Хотя каждый элемент браузера по умолчанию остается слева

    g ++ Как получить предупреждение об игнорировании возвращаемого значения функции

    Значение кругового круга по часовой стрелке / против часовой стрелки в Google Chrome

    Мои изображения размыты! Почему WPF SnapsToDevicePixels не работает?

    URL без «http | https»

    Должен ли я отключать Wi-Fi на моем ноутбуке, когда подключен кабель Ethernet?

    Давайте будем гением компьютера.