2017-02-11 90 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) 

所以第一個巢是好的。但我想進一步築巢在一美元之內。

任何想法我可以做到這一點?

我可以去:

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

但是這給立方米內的另一列內不平方米$之一。

+2

你應該考慮「傳統」R;這是例如「分裂」和列出結構的工作。我不能在這裏嘗試,但像'lapply(split(m,m $ id),function(df)split(df,df $ a))'可能是一個起點 –

+0

是否通過'mutate '「one」而不是「two」給你你想要的輸出? – aosmith

+0

@aosmith是的 - 它的工作。謝謝。如果你把它寫出來,我會批准它。 – Misha

回答

2

通過爲結果分配相同的名稱(one),而不是像以前那樣創建新列,可以用mutate中的新雙嵌套列替換單嵌套列one

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