Question

I have a large dateset with multiple data from a forest inventory. This data frame contains species found in each plot. And the data is organized by site.

> 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" 

I need to subset the data set for every plot by a multiple criteria in Especies(==24 & ==28). I was trying with

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

Buy, only worked by one species

Does anyone know how I can do this? Thanks in advance

Was it helpful?

Solution

It is difficult to work just with the str(MM).

No libraries are needed. You could try something like:

 # 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)

Optionally you may like to have all data consolidated in a single data.frame

# In case you prefer a data.frame instead of a list of data.frames
do.call(rbind, MM.subset)
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top