使用多个条件子集数据框列表

时间:2014-04-23 09:38:04

标签: r list dataframe plyr

我有一个大型日历集,其中包含来自林库存的多个数据。该数据框包含每个图中的物种。数据按网站进行组织。

> str(MM,max.level=2)  
List of 50   
     $ :'data.frame':   2944 obs. of  18 variables:  
      ..$ plot     : int [1:2944] 2 3 3 3 3 4 4 4 5 5 ...
      ..$ Cla      : Factor w/ 2 levels "A","N": 1 1 1 1 1 1 1 1 1 1 ...
      ..$ Subclase : Factor w/ 7 levels "1","3C","3E",..: 5 2 3 2 3 2 3 3 1 1 ...
      ..$ PosEsp   : int [1:2944] 1 1 1 2 2 1 1 2 1 2 ...
      ..$ Especie  : int [1:2944] 28 72 72 41 44 28 43 28 28 43 ...
      ..$ Ocupa    : int [1:2944] 10 6 7 3 2 9 5 4 5 5 ...
      ..$ Estado   : int [1:2944] 3 4 4 4 4 4 2 2 1 2 ...
      ..$ FPMasa   : int [1:2944] 1 4 4 4 4 2 4 2 1 4 ...
      ..$ Edad     : int [1:2944] 14 NA NA NA NA 35 NA 5 2 NA ...
      ..$ FInfor   : int [1:2944] 8 NA NA NA NA 7 NA 5 1 NA ...
      ..$ Fiabil   : int [1:2944] 4 NA NA NA NA 4 NA 3 4 NA ...
      ..$ Barrena1 : logi [1:2944] NA NA NA NA NA NA ...
      ..$ Barrena2 : logi [1:2944] NA NA NA NA NA NA ...
      ..$ Barrena3 : logi [1:2944] NA NA NA NA NA NA ...
      ..$ AltPer   : logi [1:2944] NA NA NA NA NA NA ...
      ..$ OrgMasa1 : int [1:2944] 2 1 1 1 1 2 1 1 1 1 ...
      ..$ OrgMasa2 : int [1:2944] 2 4 4 4 4 2 4 1 1 4 ...
      ..$ TratMasa : int [1:2944] 1 2 2 2 2 1 2 1 1 2 ...
     $ :'data.frame':   3685 obs. of  18 variables:
      ..$ plot     : int [1:3685] 25 25 26 26 26 27 28 29 29 29 ...
      ..$ Cla      : Factor w/ 3 levels "A","N","R": 1 1 1 1 1 1 1 1 1 1 ...
      ..$ Subclase : Factor w/ 8 levels "1","2","3C","3E",..: 1 1 5 5 5 1 6 3 4 3 ...
      ..$ PosEsp   : int [1:3685] 1 2 1 2 3 1 1 1 1 2 ...
      ..$ Especie  : int [1:3685] 24 237 24 237 68 24 24 24 24 237 ...
..$ Ocupa    : int [1:3685] 8 1 6 2 2 9 10 9 9 1 ...
  ..$ Estado   : int [1:3685] 4 2 3 2 2 4 3 4 4 2 ...
  ..$ FPMasa   : int [1:3685] 4 4 4 4 4 3 2 4 4 4 ...
  ..$ Edad     : int [1:3685] NA NA NA NA NA NA 25 NA NA NA ...
  ..$ FInfor   : int [1:3685] NA NA NA NA NA NA 5 NA NA NA ...
  ..$ Fiabil   : int [1:3685] NA NA NA NA NA NA 3 NA NA NA ...
  ..$ Barrena1 : logi [1:3685] NA NA NA NA NA NA ...
  ..$ Barrena2 : logi [1:3685] NA NA NA NA NA NA ...
  ..$ Barrena3 : logi [1:3685] NA NA NA NA NA NA ...
  ..$ AltPer   : logi [1:3685] NA NA NA NA NA NA ...
  ..$ OrgMasa1 : int [1:3685] 1 1 1 1 1 1 2 1 1 1 ...
  ..$ OrgMasa2 : int [1:3685] 1 1 1 1 1 1 2 1 1 1 ...
  ..$ TratMasa : int [1:3685] 1 1 1 1 1 1 1 1 1 1 ...

> names(MM[[9]])
 [1] "plot" "Cla"       "Subclase"  "PosEsp"    "Especie"  
 [6] "Ocupa"     "Estado"    "FPMasa"    "Edad"      "FInfor"   
[11] "Fiabil"    "Barrena1"  "Barrena2"  "Barrena3"  "AltPer"   
[16] "OrgMasa1"  "OrgMasa2"  "TratMasa" 

我需要在Especies(== 24& == 28)中按多个条件对每个绘图的数据集进行子集化。我正在尝试

<-llply(MM, subset, Especie==24)

购买,仅由一个物种工作

有谁知道我怎么做到这一点?提前致谢

1 个答案:

答案 0 :(得分:0)

使用str(MM)很难处理。

不需要图书馆。你可以尝试类似的东西:

 # input: df - output: subset by plot and some other criteria
 f <- function(x){
       x.splitted <- split(x, x$plot)
       lapply(x.splitted, function(y) y[y$Especie == 24 &
                                        y$Especie == 28,])
}

# 
MM.subset <- lapply(MM, f)

您可以选择将所有数据合并到一个data.frame

# In case you prefer a data.frame instead of a list of data.frames
do.call(rbind, MM.subset)