代码之家  ›  专栏  ›  技术社区  ›  Omry Atia

提取向量中与索引最近的相邻索引

  •  0
  • Omry Atia  · 技术社区  · 6 年前

    N ,和一个随机索引 ind 在这个向量中。 我想以最对称的方式提取11个最接近 ind公司 在最有效的方法中,比如不超过原始向量的长度,也不会得到负指数。

    如果 N = 200 ,和 ind = 199

    ind = 3 ,结果应为1:11。

    如果 ind = 195 ,结果应为190:200。

    我可以和你一起做 if

    ff = function(ind, N){
      vv = sapply(ind, function(x) c((x-5):(x+5)))
      if (max(vv) > N) {
        vv = vv - max(vv) + N
      } else if (min(vv) < 6) {
        vv = vv - min(vv) + 1
      }
      return(vv)
    }
    

    有没有更有效的方法(例如子集)来实现这一点?

    1 回复  |  直到 6 年前
        1
  •  2
  •   chinsoon12    6 年前

    以下是几种方法:

    1) 使用 order

    sort(head(order(abs(1:N - ind)), 11L))
    

    2) 排序索引和 ind 然后进入前11个位置

    sort((1:N)[as.integer(names(head(sort(abs(setNames(1:N, 1:N) - ind)), 11L)))])
    

    3) 使用基数排序:

    sort(head(sort(abs(1:N - ind), index.return=TRUE)$ix, 11L))