2017-02-11 2 views
3

Я хотел бы создать двойную вложенную структуру данных, где c вложен в элемент, который далее вложен в id.двойное вложение с tidyverse и purrr

library(tidyverse) 
m<-data_frame(id=c(100,101,100,101,100,101,100,101), 
      a=c("A","A","B","B","A","A","D","D"), 
      c=c(1:8)) 
m2 <- m %>% 
group_by(id) %>% 
nest(.key = one) 

Итак, первое гнездо в порядке. Но я хотел бы продолжить гнездо в пределах m2 $ one.

любая идея, как я могу это сделать?

Я могу пойти:

 m3 <- m2 %>% 
       mutate(
        two=map(m2$one,~(.x %>% 
             group_by(a) %>% 
             nest(.key=two))) 
      ) 

, но это дает еще один столбец в м3, а не в м2 $ один.

+2

вы должны учитывать «традиционные» R; это, например, работа для 'split' и списков структур. я не могу попробовать здесь, но что-то вроде 'lapply (split (m, m $ id), function (df) split (df, df $ a))' может быть отправной точкой –

+0

Именование столбца, который вы делаете через 'mutate '« один »вместо« два »дает вам результат, который вы хотите? – aosmith

+0

@aosmith Yep - Это сработало. Спасибо. Если вы напишете это, я одобрю его. – Misha

ответ

2

Вы можете заменить единый вложенным столбец one с новым двойным вложенным в колонке mutate, назначая такое же имя (one) в результате вместо того, чтобы новый столбец, как вы делали.

m2 %>% 
    mutate(one = map(one, ~.x %>% 
         group_by(a) %>% 
         nest(.key = two))) 
Смежные вопросы