[英]R: Get x neighbours from a dataframe based on column value
我编写了一个函数,该函数提供了一个数字,然后为我提供了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行,这确实很慢 。 如何更快地做到这一点?
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))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.