查找值最接近向量的列

时间:2018-09-07 11:22:24

标签: r datetime

我有一个向量,其中包含以毫秒为单位的时间,如下所示;

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行。

任何idia该怎么做?

1 个答案:

答案 0 :(得分:3)

您可以从向量和数据帧的每一列计算出欧式距离,然后检查哪一列具有最小距离:

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])

编辑

正如埃文·弗里兰德(Evan Friedland)指出的,您实际上可以使用:

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

which.min(sqrt(colSums((t(v)-dataFrame)^2)))