同一向量中最接近的其他值

佐治亚州

我有一个向量

set.seed(2)
x <- sample.int(20, 5)

[1]  4 14 11  3 16

现在,对于我想找到的每个元素

所述具有最小距离元件min(abs(x[i]-x[-i]))用于元件i),其在这里将

[1]  3 16 14  4 14

具有最小距离的元素的(第一)索引,此处为

[1] 4 5 2 1 2

关键是不考虑元素本身,而是仅考虑所有其他元素,这就是为什么R-在向量中找到最接近值的最快方法不是答案。

如果实际答案在那里,对不起-我没有找到。

G.格洛腾迪克

1)RfastdistaRfast中使用我们可以获得最接近的两个索引。将第二个最接近的值作为最接近的值。

library(Rfast)
x <- c(4, 14, 11, 3, 16) # input

x[ dista(x, x, k = 2, index = TRUE)[, 2] ]
## [1]  3 16 14  4 14

2)sqldf使用SQL,我们可以将DF自身(不包括相同值的值)连接起来,并以最小的距离进入行。

DF <- data.frame(x)   # x is from (1)
sqldf("select a.x, b.x nearest, min(abs(a.x - b.x)) 
  from DF a 
  left join DF b on a.x != b.x 
  group by a.rowid")[1:2]

给予:

   x nearest
1  4       3
2 14      16
3 11      14
4  3       4
5 16      14

3)zoo对输入进行排序,获取与每个元素任一侧的最小差异相对应的值,然后将其排序。

library(zoo)
ix <- order(x)
least <- function(x) if (x[2] - x[1] < x[3] - x[2]) x[1] else x[3]
rollapply(c(-Inf, x[ix], Inf), 3, least)[order(ix)]
## [1]  3 16 14  4 14

4)Base R使用ixleast自(3),我们可以仅使用基本函数来模仿(3),如下所示。

apply(embed(c(-Inf, x[ix], Inf),  3)[, 3:1], 1, least)[order(ix)]
## [1]  3 16 14  4 14

4a)这种稍短的变化也可以起作用:

-apply(embed(-c(-Inf, x[ix], Inf),  3), 1, least)[order(ix)]
## [1]  3 16 14  4 14

4b)进一步简化,我们有以下基本解决方案,再次ix基于(3):

xx <- x[ix]
x1 <- c(-Inf, xx[-length(xx)])
x2 <- c(xx[-1], Inf)
ifelse(xx - x1 < x2 - xx, x1, x2)[order(ix)]
## [1]  3 16 14  4 14

重复项

问题中的示例没有重复项,但是如果有重复项,则存在有关问题定义的一些问题。例如,c(1, 3, 4, 1)如果我们查看第一个值1,则存在另一个正好等于它的值,因此最接近的值是1。另一种解释是,应返回不等于1的最接近的值,在这种情况下为3.在上面的代码中,sqldf解决方案给出的最接近值不等于当前值,而其他解决方案给出的其余值之中最接近的值。

如果我们想使最接近的解释不等于其他解释,sqldf则可以rle在命令压缩后将其压缩为唯一值,然后再使用inverse.rle,如修改后的4b所示:

x <- c(1, 3, 4, 1)
ix <- order(x)
r <- rle(x[ix])
xx <- r$values
x1 <- c(-Inf, xx[-length(xx)])
x2 <- c(xx[-1], Inf)
r$values <- ifelse(xx - x1 < x2 - xx, x1, x2)
inverse.rle(r)[order(ix)]
## [1] 3 4 3 3

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

查找排序向量中最接近的索引

来自分类Dev

查询以基于其他列获取最接近的匹配值

来自分类Dev

Java:搜索数组中最接近的值

来自分类Dev

返回数组中最接近值的索引

来自分类Dev

合并SAS中最接近的值

来自分类Dev

如何获得列表中最接近的值?

来自分类Dev

Java:搜索数组中最接近的值

来自分类Dev

在同一向量上更改 std::transform 内的向量

来自分类Dev

如何为另一个向量中的每个元素获取向量中最接近的元素而不重复?

来自分类Dev

如何为另一个向量中的每个元素获取向量中最接近的元素而不重复?

来自分类Dev

推断numpy数组中最接近的较小值

来自分类Dev

.bisect找不到字典中最接近的值

来自分类Dev

如何从POJO属性中找到Java中最接近的值?

来自分类Dev

使用MATLAB中最接近的值匹配列元素

来自分类Dev

给定两组向量,如何为第一组中的每个向量找到第二组中最接近的向量?

来自分类Dev

找到最接近的向量

来自分类Dev

将值匹配到R中另一个列表中最接近的较大值

来自分类Dev

将空值设置为列表中最接近的最后一个非空值-LINQ

来自分类Dev

用前后行中最接近的匹配值替换一行中的值,并在多列上执行此操作

来自分类Dev

如果其他列匹配100%,则查找一列中值的最接近匹配项

来自分类Dev

加速循环以用另一个数组中最接近的值填充数组

来自分类Dev

多个线程在同一向量的不同向量上同时添加元素发生错误

来自分类Dev

在R向量中找到最接近0.50的值

来自分类Dev

找到最接近其他DataFrame的行并获取该行的索引

来自分类Dev

如何在R中的向量中找到一个值与其最接近的值之间的差?

来自分类Dev

javascript:将浮点数四舍五入到最接近的.25(或其他值)。

来自分类Dev

最接近值的不同文件,具有不同的行数和其他条件(bash awk other)

来自分类Dev

如何将两列(纬度/经度)中的数据与其他两列中的最接近值进行匹配?

来自分类Dev

向量化为另一个数组中的每个元素在数组中找到最接近的值

Related 相关文章

  1. 1

    查找排序向量中最接近的索引

  2. 2

    查询以基于其他列获取最接近的匹配值

  3. 3

    Java:搜索数组中最接近的值

  4. 4

    返回数组中最接近值的索引

  5. 5

    合并SAS中最接近的值

  6. 6

    如何获得列表中最接近的值?

  7. 7

    Java:搜索数组中最接近的值

  8. 8

    在同一向量上更改 std::transform 内的向量

  9. 9

    如何为另一个向量中的每个元素获取向量中最接近的元素而不重复?

  10. 10

    如何为另一个向量中的每个元素获取向量中最接近的元素而不重复?

  11. 11

    推断numpy数组中最接近的较小值

  12. 12

    .bisect找不到字典中最接近的值

  13. 13

    如何从POJO属性中找到Java中最接近的值?

  14. 14

    使用MATLAB中最接近的值匹配列元素

  15. 15

    给定两组向量,如何为第一组中的每个向量找到第二组中最接近的向量?

  16. 16

    找到最接近的向量

  17. 17

    将值匹配到R中另一个列表中最接近的较大值

  18. 18

    将空值设置为列表中最接近的最后一个非空值-LINQ

  19. 19

    用前后行中最接近的匹配值替换一行中的值,并在多列上执行此操作

  20. 20

    如果其他列匹配100%,则查找一列中值的最接近匹配项

  21. 21

    加速循环以用另一个数组中最接近的值填充数组

  22. 22

    多个线程在同一向量的不同向量上同时添加元素发生错误

  23. 23

    在R向量中找到最接近0.50的值

  24. 24

    找到最接近其他DataFrame的行并获取该行的索引

  25. 25

    如何在R中的向量中找到一个值与其最接近的值之间的差?

  26. 26

    javascript:将浮点数四舍五入到最接近的.25(或其他值)。

  27. 27

    最接近值的不同文件,具有不同的行数和其他条件(bash awk other)

  28. 28

    如何将两列(纬度/经度)中的数据与其他两列中的最接近值进行匹配?

  29. 29

    向量化为另一个数组中的每个元素在数组中找到最接近的值

热门标签

归档