種のリスト、その数、および調査開始からの日数を含むデータセットがあります。多くの日がサンプリングされていないため、日は連続していません。たとえば、5 日、6 日、9 日、10 日、15 日、34 日、39 日などに数えられた鳥がいる可能性があります。最も早い日付を 0 日目に設定しました。
サンプルデータ:
species counts day
Blue tit 234 0
Blue tit 24 5
Blue tit 45 6
Blue tit 32 9
Blue tit 6 10
Blue tit 98 15
Blue tit 40 34
Blue tit 57 39
Blue tit 81 43
..................
このデータをブートストラップし、結果のデータセットを取得する必要があります。ここで、いつ開始するか、どの間隔で進めるか、サンプリングするポイント数を指定します。
例: 5 日目を開始日として無作為に選択し、間隔を 30、サンプリングする行数を 2 とします。これは、5 日に開始し、それに 30 を追加して、35 日前後の 2 行を探すことを意味します。 (ただし、35日目自体ではありません)。この場合、day が 34 と 39 の 2 つの行を取得します。
次に、30 を 35 に加算し、65 付近の 2 つのポイントを探します。すすぎ、データセットの最後に到達するまで繰り返します。
サンプリングを行うためにこの関数を作成しましたが、欠陥があります (以下を参照)。
resample <- function(x, ...) x[sample.int(length(x), ...)]
locate_points<- function(dataz,l,n) #l is the interval, n is # points to sample. This is called by another function that specifies start time among other info.
{
tlength=0
i=1
while(tlength<n)
{
low=l-i
high=l+i
if(low<=min(dataz$day)) { low=min(dataz$day) }
if(high>=max(dataz$day)) { high=max(dataz$day) }
test=resample(dataz$day[dataz$day>low & dataz$day<high & dataz$day!=l])
tlength=length(test)
i=i+1
}
test=sort(test)
k=test[1:n]
return (k)
}
サポートが必要な 2 つの問題:
私の関数は目的のポイント数を返しますが、検索値を中心としていません。幅が広くなるにつれて、より多くのポイントが得られ、それらを並べ替えて最初の n を選択すると、それらは低い値にならない傾向があるため、理にかなっています。
次に、実際の行を取得するにはどうすればよいですか? 今のところ
which
、 を使用してこれらの行を検索し、rbind
それらの行をまとめて 'ing する別の関数があります。もっと良い方法があるはずです。
ありがとう!