如何将df分成独特的组?

时间:2017-06-22 17:31:03

标签: r list dataframe split unique

我有以下data.frame。查看前几行的示例和 属性。

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具有一组48个SubPop和Origin的独特组合。

那就是说,我希望最终输出48个列表,每个列表只有该组的属性。 示例:第一组“AL和2008”将包含我的数据帧的所有条目,其中SubPop = Al和Origin = 2008。等等...

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

使用此代码,我可以找到属性的唯一组合,但拆分过程会随机为组分配属性。

很抱歉,如果它令人困惑......

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:-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