Найти столбец со значениями, ближайшими к вектору - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть вектор, содержащий времена в миллисекундах, похожий на этот;

vector <- c(667753, 671396, 675356, 679286, 683413, 687890, 691742,
695651, 700100, 704552, 708832, 713117, 717082, 720872, 725002, 729490,
733824, 738233, 742239, 746092, 750003, 754236, 867342, 870889, 873704,
876617, 879626, 882595, 885690, 888602, 891789, 894717, 897547, 900797,
903615, 906646, 909624, 912613, 915645, 918566, 921792, 924625, 927538,
930721, 933542)

Теперь я хочу посмотреть на большой фрейм данных с большим количеством столбцов времени и найти один столбец, который содержит значения времени, наиболее близкие (по строкам) к моим значениям времени вектора.

Файл data.frame, содержащий все столбцы, имеет одинаковое количество строк. Допустим, мой вектор содержит 240 элементов, тогда каждый столбец в более крупном data.frame состоит из 240 строк.

Какая-нибудь идея, как это сделать?

1 Ответ

0 голосов
/ 07 сентября 2018

Вы можете рассчитать евклидово расстояние от вашего вектора и каждого столбца кадра данных, а затем проверить, какой столбец имеет наименьшее расстояние:

which.min(sapply(1:ncol(dataFrame), function(i) sqrt(sum((t(v)-dataFrame[,i])^2))))

Вышеприведенное возвращает индекс столбца с наименьшим расстоянием.

Где dataFrame - это фрейм данных, содержащий столбцы разного времени (поэтому мы сравниваем каждый столбец с вектором v), а v - вектор.

Ниже приведен квадратный корень из суммы квадратов расстояний (евклидово расстояние):

sqrt(sum((t(v)-dataFrame[,i])^2)))

Вы также можете использовать следующее в качестве меры расстояния:

abs(t(v)-dataFrame[,i])

EDIT

Как указал Эван Фридланд, вы можете просто использовать:

which.min(colSums(abs(v-dataFrame))) 

или

which.min(sqrt(colSums((t(v)-dataFrame)^2))) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...