2017-06-22 5 views
-1

私は以下のdata.frameを持っています。最初の数行の例と の属性の例を参照してください。dfを一意のグループに分割する方法は?

SubPop  Origin grid_code 
AL   2008 4.730380 
AL   2008 5.552315 
AL   2008 5.968850 
AL   2008 5.128384 
AL   2009 6.927450 
AL   2009 7.135734 
ALCentral 2008 7.381087 
ALCentral 2008 6.232927 
ALCentral 2009 6.431800 
ALCentral 2009 6.690246 
ALCentral 2009 6.794144 

このdata.frameを属性SubPopとOriginの組み合わせの一意のグループに分割する方法を知りたいと思います。たとえば、data.frame全体には、SubPopとOriginの48通りの組み合わせがあります。

つまり、私は最終的な出力として48リストを持ちたいと思います。そして、各リストはそのグループの属性しか持たないでしょう。 例:最初のグループ「AL and 2008」は、SubPop = AlとOrigin = 2008のデータフレームのすべてのエントリを保持します。それで...

> unique<-unique(df[,c("SubPop", "Origin")]) 
> unique<-unique[order(unique$SubPop, unique$OriginT),] 
> df_split<-split(df, unique) 

このコードでは、属性の一意の組み合わせを見つけることができますが、分割プロセスでは属性がグループにランダムに割り当てられています。

ご迷惑をおかけして申し訳ありません...

+3

最も簡単な方法は、おそらく 'はmyList <です - スプリット(DF、相互作用(DF $ SubPop、DF $起源))'によって分割data.framesの名前のリストを返します。これら2つの変数の相互作用。 – lmo

+0

均質なデータ構造を少量のデータで分割し、それぞれを個別に扱うことをお勧めしますか分かりません。データベース管理者であれば、2つの属性が変更されたという理由だけで、個別に名前が付けられたテーブルを48個作成するでしょうか? – Uwe

答えて

2

これはさまざまな方法があります。ここでは2つです:

xy <- read.table(text = "SubPop  Origin grid_code 
AL   2008 4.730380 
       AL   2008 5.552315 
       AL   2008 5.968850 
       AL   2008 5.128384 
       AL   2009 6.927450 
       AL   2009 7.135734 
       ALCentral 2008 7.381087 
       ALCentral 2008 6.232927 
       ALCentral 2009 6.431800 
       ALCentral 2009 6.690246 
       ALCentral 2009 6.794144", header = TRUE) 

by(data = xy, INDICES = list(xy$SubPop, xy$Origin), FUN = function(x) x) 

library(dplyr) 

xy %>% 
    group_by(SubPop, Origin) 
-3
mylist <- split(df, interaction(df$SubPop,df$Origin)) 
indicator <- seq_len(length(mylist)) 
eval(parse(text = paste("L" , indicator , "<- ", "mylist[[", indicator, "]]", sep= ""))) 

> L1 
    SubPop Origin grid_code 
1  AL 2008 4.730380 
2  AL 2008 5.552315 
3  AL 2008 5.968850 
4  AL 2008 5.128384 
> L2 
    SubPop Origin grid_code 
7 ALCentral 2008 7.381087 
8 ALCentral 2008 6.232927 
> L3 
    SubPop Origin grid_code 
5  AL 2009 6.927450 
6  AL 2009 7.135734 
> L4 
     SubPop Origin grid_code 
9 ALCentral 2009 6.431800 
10 ALCentral 2009 6.690246 
11 ALCentral 2009 6.794144 
+0

この回答はすでにコメントに掲載されています。あなたの投稿にはどのような価値がありますか? – lmo

+0

申し訳ありません投稿されたコメントが表示されません –

+0

今私はいくつかの値を追加しました:)各部分のリストを持つことができます –

関連する問題