根据条件将矢量中的每个值与所有其他值进行比较

时间:2018-05-14 13:25:14

标签: r vector compare criteria

我有一个唯一值的向量,但我想只获得满足至少一个其他值的特定条件的向量。 例如,如果我有一个像这样的矢量

v <- c(1,2,5,6,8,10,15,16)

我想要满足的标准是在向量中至少有一个其他值的值,它们之间的差值为1,结果将是

1,2,5,6,15,16

我希望能够使用不同的功能。所以对于这个例子,让我们假设我使用的函数给出了两个给定数字之间的绝对差值:

AbsDiff <- function(x,y){
           abs(x-y)
           }

因此,解决方案应针对所有其他值为每个值运行AbsDiff函数,并获得所需的结果。

2 个答案:

答案 0 :(得分:2)

这是您功能的略微修改版本:

m <- outer(v, v, FUN = function(x,y) abs(x-y) == 1)
v[colSums(m) > 0]
# [1]  1  2  5  6 15 16

正如您所看到的,只要两个值之间的绝对差值正好为1,我就为您的函数添加了一个逻辑检查。这样就可以更容易地提取相关的索引。

如果你想现在使用你的功能,你可以这样做:

m <- outer(v, v, FUN = AbsDiff)
v[colSums(m == 1) > 0]

这意味着我们在第二步中检查== 1.

答案 1 :(得分:0)

还不如@docendo解决方案好,

v <- c(1,2,5,6,8,10,15,16)
x <- vector()
for(i in v){

  if((i+1) %in% v){
    x[length(x)+1] = i
    x[length(x)+1] = i+1
  }
}

x