查找两个向量之间的序列[差距或差异]

Finding Sequences [gap or difference] between two vectors

假设我有两个向量

a <- c(1,3,5,7,9, 23,35,36,43)
b <- c(2,4,6,8,10,24, 37, 45)

请注意两者的 length 不同。

我想找到两个向量之间的 gap/difference/sequence 以根据最接近程度进行匹配。

预期输出

a     b
1     2
3     4
5     6
7     8
9     10
23    24
35    NA
36    37
43    45

请注意 35NA 反对,因为 3637.

有序列 matching/closest 接近度

该算法只能处理一个NA。对于 N 个可能的 NA,您只需要尝试所有 combination(length(b), N) 种可能性。尝试为每个可能的 NA 插入槽找到 min(abs(a-b))

  # Try insertion
  Map(f = function(i) mean(abs(append(b, NA, i) - a), na.rm = T),
      i = 1:length(b)) %>%
  # Find index of the best insertion spot
  which.min %>%
  # Actually insert
  {append(b, NA, .)} %>%
  # Display data
  {cbind(a, b = .)}

       a  b
 [1,]  1  2
 [2,]  3  4
 [3,]  5  6
 [4,]  7  8
 [5,]  9 10
 [6,] 23 24
 [7,] 35 NA
 [8,] 36 37
 [9,] 43 45

您可以使用 findInterval

df=data.frame(a)
df$b[findInterval(b, a)]=b
df
   a  b
1  1  2
2  3  4
3  5  6
4  7  8
5  9 10
6 23 24
7 35 NA
8 36 37
9 43 45