У меня есть набор данных, который включает в себя список видов, их подсчет и дневной счет с момента начала опроса. Поскольку многие дни не были отобраны, день не является непрерывным. Так, например, на день 5,6,9,10,15,34,39 и так далее могут быть птицы. Я установил самую раннюю дату, чтобы день 0.Как выбрать n значений в случайном порядке, ближайших к значению y, когда данные не являются непрерывными?
Пример данные:
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 и ищу 2 строки около 35 дней (но не сам день 35). В этом случае я возьму два ряда, где день равен 34 и 39.
Далее Я добавляю от 30 до 35 и искал два очка вокруг 65. Промывка повторяется, пока я не дойду до конца набора данных.
Я написал эту функцию, чтобы сделать выборку, но имеет недостатки (см ниже):
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)
}
Две проблемы, мне нужна помощь с:
Хотя моя функция не возвращать желаемое количество точек, оно не сосредоточено вокруг моего значения поиска. Имеет смысл, потому что, когда я расширяюсь, я получаю больше очков, и когда я сортирую их и выбираю первое n, они, как правило, не являются низкими значениями.
Во-вторых, как получить фактические строки? На данный момент у меня есть еще одна функция, чтобы найти эти строки, используя
which
, затемrbind
'объединив эти строки. Похоже, что должен быть лучший способ.
спасибо!
Я не знаю, понимаю ли вы вас правильно, но кажется, что ваша функция не делает то, что вы описываете. Где именно вы указываете свой интервал, который добавляется каждый раз? Это полезно, если добавить некоторые комментарии, объясняющие, что такое l, n и так далее. –
@Joris Эта функция имеет другую оболочку, указывающую время начала. Я сделал несколько комментариев к приведенному выше коду. – Maiasaura
Это кажется странным способом сделать выборку ваших данных. Какова ваша основная мотивация? – hadley