2017-02-11 7 views
3

ダブルネストされたデータ構造を作成したいと思います。ここでcはid内にネストされています。tidyverseとpurrを使ったダブルネスト

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) 

したがって、最初のネストはOKです。しかし、私はm2 $ 1の中でさらに巣を作りたいと思っています。

どうすればいいですか?

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

をしかし、これではありません平方メートル$一つの中に、M3内の別の列を与える:

私は行くことができます。

+2

「従来の」Rを考慮する必要があります。これは例えば 'split'のための仕事であり、構造をリストします。私はここで試すことはできませんが、 'lapply(split(m、m $ id)、function(df)split(df、df $ a))'のようなものが開始点になるかもしれません。 –

+0

'mutate 「2」の代わりに「1」を指定すると、必要な出力が得られますか? – aosmith

+0

@aosmithええ - それは働いた。どうも。もしあなたがそれを書いたら私はそれを承認するでしょう。 – Misha

答えて

2

単一ネストされた列oneを、新しい列を作成するのではなく、結果に同じ名前(one)を割り当てて、mutateの新しい二重ネストされた列に置き換えることができます。

m2 %>% 
    mutate(one = map(one, ~.x %>% 
         group_by(a) %>% 
         nest(.key = two))) 
関連する問題