我有以下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)
使用此代码,我可以找到属性的唯一组合,但拆分过程会随机为组分配属性。
很抱歉,如果它令人困惑......
答案 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