Ich habe einige Code, um Stichproben von 1 bis 10 Zeilen aus einem Datenrahmen zu nehmen, replizieren diese Stichproben 5 mal und berechnen eine Netzwerkmetrik (Verbindung) auf jeder der Stichproben. Allerdings möchte ich diesen Code getrennt über jede Ebene von "Site" und "Methode" in meinem Datenrahmen ausführen.Schleife über verschiedene Faktorstufen in einem Datenrahmen
Wie teile ich den Datenrahmen (df) nach Standort und Methode auf, führe den folgenden Code für jede Teilmenge aus und gebe dann alle Ausgaben in eine einzige Datei mit den Spalten "site", "method", "size" zurück (Anzahl der abgetasteten Zeilen) und "Verbindung"?
Hier ist, was ich bisher:
df <- read.table(text = "bird_sp plant_sp value site method
1 species_a plant_a 1 a m
2 species_a plant_a 1 a m
3 species_b plant_b 1 a m
4 species_b plant_b 1 a m
5 species_c plant_c 1 a m
6 species_a plant_a 1 b m
7 species_a plant_a 1 b m
8 species_b plant_b 1 b m
9 species_b plant_b 1 b m
10 species_c plant_c 1 b m
11 species_a plant_a 1 a f
12 species_a plant_a 1 a f
13 species_b plant_b 1 a f
14 species_b plant_b 1 a f
15 species_c plant_c 1 a f
16 species_a plant_a 1 b f
17 species_a plant_a 1 b f
18 species_b plant_b 1 b f
19 species_b plant_b 1 b f
20 species_c plant_c 1 b f", header = TRUE)
#make sample function
sample_fun <- function(x,size){
rows <- sample(1:nrow(x),size,replace=FALSE)
intlist <- x[rows,]
return(intlist)
}
#convert list to interaction matrix
make_mat <- function(x){
mat <- with(x,tapply(value, list(plant_sp, bird_sp), sum))
mat[is.na(mat)] <- 0
return(mat)
}
#create vector with required sample size and replication
size_vector <- rep(1:10,5)
#use vector to generate list of interactions
samples_Data <- lapply(size_vector, function(x) sample_fun(df,x))
output <- lapply(samples_Data, function(x)
make_mat(x))
library(bipartite)
#calculate connectance on each element (matrix) in output list
#ignore warnings
metrics <- lapply(output, networklevel, index=c("connectance"))
met <- data.frame(unlist(metrics))
names(met) <- names(metrics[[1]])
#Add number of interactions sampled
met$size <- size_vector