2017-08-10 33 views
0

Ich versuche, verschiedene Anzahl von Zeilen eines Datenrahmens in R zu probieren. Ich möchte dieses Beispiel für N Zeilen erhalten, die ein bestimmtes Attribut teilen (in meinem Fall cell_id_25km) mehrere Male. Als basierend auf jedem Beispiel mit N Zeilen möchte ich eine Funktion anwenden (mit anderen Worten: mach etwas damit und speichere die Ergebnisse). HierSample unterschiedliche Anzahl von Zeilen in einer R-Schleife

ist der Code, den ich ohne Erfolg bin mit:

Ein Beispiel für meine Datenrahmen (df):

cell_id_25km latitude longitude date_collected N_rec species id_species 

    101064 -23.625 30.125  1924-03-31 2142 sp.783   1   
    101064 -23.600 30.100  1982-01-24 2142 sp.783   1   
    101064 -23.625 30.125  1968-03-15 2142 sp.783   1   
    101064 -23.625 30.125  1918-02-28 2142 sp.783   1   
    101064 -23.625 30.125  1960-02-29 2142 sp.783   1   
    101064 -23.625 30.125  1958-01-13 2142 sp.783   1   

Der Code Ich versuche:

nrep<-100 

cell=unique(df$cell_id_25km) 

tt3<-c() 

tt4<-c() 

tt5<-c() 

    for(j in 1:nrep){ 
     u[j]<- round(runif(1, min = 100, max = 1000), digits = 0) 
     for (i in 1:length(cell)) { 
     for (k in 1:length(u[j])){ 
      dat3 = df[df$cell_id_25km == cell[i], c("cell_id_25km", "id_species", "species")] 
      tt4[[k]] <- sample_n(dat3, u[j], replace = FALSE) 
      tt5[[k]]<- length(unique(tt4$species))}}} 

I denke ich werde die Ergebnisse der Schleife nicht korrekt speichern.

+0

Woher kommt die 'uu2'? – Kevin

+0

Entschuldigung, dass ich es nicht erwähnt habe. Es ist mein Datenrahmen. – user2120294

Antwort

0

Ich denke, das Problem bei dieser Linie ist: tt5[[k]] <- length(unique(tt4$species))

ändert es dazu: tt5[[k]] <- length(unique(tt4[[k]]$species))

Für Ihre Ergebnisse zu speichern, würde ich TT3, TT4 und TT5 Listen machen. Ändern Sie dann tt5, um j, i und k zum Speichern von Ergebnissen einzuschließen (andernfalls überschreiben Sie die Ergebnisse nur mit k).

diese Änderungen hinzufügen:

`tt3 <- list() 
tt4 <- list() 
tt5 <- list() 
tt5[[paste(j, i, k, sep = " ")]] <- length(unique(tt4[[k]]$species))` 

nach dem Code, können Sie alle Ergebnisse, wenn Sie mit do.call (do.call(rbind, tt5)).

`nrep<-100 

cell=unique(df$cell_id_25km) 

tt3<-list() 

tt4<-list() 

tt5<-list() 

u <- list() 

for(j in 1:nrep){ 
    u[j]<- round(runif(1, min = 100, max = 1000), digits = 0) 
    for (i in 1:length(cell)) { 
    for (k in 1:length(u[j])){ 
     dat3 = df[df$cell_id_25km == cell[i], c("cell_id_25km", "id_species", "species")] 
     tt4[[k]] <- sample_n(dat3, as.numeric(u[j]), replace = FALSE) 
     tt5[[paste(j,i,k,sep=" ")]]<- length(unique(tt4[[k]]$species))}}} 


do.call(rbind, tt5)` 
+0

Hallo, Danke! Ich kann nicht genau sehen, wie ich tt5 ändern sollte, um j, i und k einzuschließen, um die Ergebnisse zu speichern. Können Sie ein Beispiel für den Code angeben? Vielen Dank! – user2120294

+0

Ich habe meine Antwort bearbeitet, um die Änderungen anzuzeigen, die ich in Ihrem Code vorgenommen habe. – user108363

+0

Danke! Ja, der Code funktioniert jetzt !!! – user2120294

Verwandte Themen