2013-11-14 5 views
0

Мне нужно получить подмножество моего фрейма данных на основе текущей строки И некоторые вычисления во всем столбце фрейма данных. Я пытаюсь использовать векторные обозначения R в, чтобы отфильтровать ненужные строки на основе пользовательской функции:Фильтрация кадра кадра данных с использованием пользовательской функции

myDataFrame[customFn(myDataFrame$A, ????? <<here I need to reference not just the current value of myDataFrame$A, but the whole vector myDataFrame$A>>),] 

Мой customFn принимает 2 аргумент: число и вектор, и возвращает вектор булевых. Как передать весь вектор столбца функции? Я не хочу использовать заявку, так как думаю, что будет намного медленнее, чем векторная фильтрация.

Спасибо!

+2

Passing столбца 'A' ​​так же, как вы сделали пройдут полный столбец ... Пожалуйста, включите некоторые из кода вы пытались включая ваш' customFn', что Вы написали, а также образец набора данных. – Justin

+0

customFn - это функция gdist в пакете «Imap». Мой кадр данных состоит из lat/longs. Для каждой строки мне нужно найти «близких соседей» в пределах 1 мили. – Vlad

ответ

1

Как @Justin указывает на то, что customFn возвращает вектор логических элементов такой же длины, что и ваш фрейм данных, все будет в порядке. Например

# Define a function to return a vector of logicals based on the mtcars$mpg 
keepers <- function(d, lower=18, upper=20) { 
    to_keep <- rep(TRUE, nrow(d)) 
    to_keep[(d$mpg < lower) | (d$mpg > upper)] <- FALSE 
    to_keep # True if d$mpg is between upper and lower 
} 

mtcars[keepers(mtcars), ] 
Смежные вопросы