R: Получить x соседей из фрейма данных на основе значения столбца - PullRequest
0 голосов
/ 31 марта 2019

Я написал функцию, которой я предоставляю число, которое затем дает мне x строк, числовое значение которых близко к входному числу.

Например, это кадр данных:

test.data <- data.frame(
  number = c(0,1,3,4,6,2,7,1,3,3,4,0,1,6), 
  letter = letters[1:14]
)

Тогда я написал эту функцию, чтобы дать мне соседей:

# library(dplyr)
get.closest <- function( input.number, n.closest, data ) {
  data %>% 
    mutate(abs.score.dif = abs(input.number - number)) %>%
    arrange(abs.score.dif) %>%
    head(n.closest)
}

Так, например, get.closest(6, 3, test.data) даст мне:

  number letter abs.score.dif rel.score.dif
1      6      e             0             0
2      6      n             0             0
3      7      g             1            -1

Однако я должен сделать это для > 20 000 номеров, и мой фрейм данных также содержит около 20 000 строк, что делает это действительно медленным . Как это можно сделать быстрее?

1 Ответ

1 голос
/ 31 марта 2019
N = 6
n = 3
df_out = transform(test.data[head(order(abs(N - test.data$number)), n),],
                   abs.diff = abs(N - number),
                   rel.diff = N - number)
df_out
#   number letter abs.diff rel.diff
#5       6      e        0        0
#14      6      n        0        0
#7       7      g        1       -1

Кажется, быстро со следующими данными

#DATA
set.seed(42)
test.data = data.frame(number = sample(0:10, 200000, TRUE),
                       letter = sample(letters, 200000, TRUE))
...