2017-08-10 6 views
0

Rでデータフレームの行数を異なるサンプル数にしようとしています。与えられた属性を共有するN行のサンプルを取得したいと思います(私の場合は、 cell_id_25km)を複数回繰り返します。各サンプルN12行を持つサンプルに基づいて、関数を適用したいとします(言い換えれば、何かを行い、結果を保存する)。ここで Rループ内の異なる行数をサンプルする

は、私は成功せずに使用しているコードです:

私のデータフレーム(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   

私がしようとしているコード:

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私はループの結果を正しく保存していないと思う。

+0

「uu2」はどこから来ていますか? – Kevin

+0

申し訳ありません。私のデータフレームです。 – user2120294

答えて

0

私はあなたの問題は、このラインであると思う:これまで tt5[[k]] <- length(unique(tt4$species))

変更を: ​​

あなたの結果を保存するために、私はTT3、TT4、及びTT5リストになるだろう。次に、結果を保存するためにj、i、およびkを含むようにtt5を変更します(それ以外の場合は、kだけを使用して結果を書き換えます)。

これらの変更を追加します。

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

をあなたのコードの後、あなたはdo.calldo.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

こんにちは、ありがとう!結果を保存するためにj、i、およびkを含むようにtt5をどのように変更すべきか正確にはわかりません。コードの例を教えてください。ありがとう! – user2120294

+0

自分のコードで行った変更を表示するために自分の答えを編集しました。 – user108363

+0

ありがとうございます!はい、コードは現在動作します! – user2120294

関連する問題