删除向量的孤立元素

时间:2019-02-25 08:42:45

标签: r if-statement vector

我有一个整数向量,我想通过消除“孤立”的成分对其进行过滤。 “隔离”是什么意思?那些不位于其他组件4个邻域中的组件。 向量中的分量越来越有序,并且没有重复。

例如,如果我有c(1,2,3,8,15,16,17),那么我就需要消除8,因为它不在其他元素的4邻域中。

我尝试申请

   for (p in 1:(length(index)-2))
      if((index[p+1]>3+index[p])&(index[p+2]>3+index[p+1])){index[p+1]<-0}


    index<-index[index!=0]

其中index是我感兴趣的向量,但是逻辑条件存在一些问题。 你能给我一些提示吗?

谢谢。

2 个答案:

答案 0 :(得分:6)

您可以结合使用outercolSums,即

x[colSums(abs(outer(x, x, `-`)) >= 4) == length(x)-1]
#[1] 8

要消除这些值,我们可以做到,

i1 <- colSums(outer(x, x, FUN = function(i, j) abs(i - j) >= 4)) == length(x) - 1
x[!i1]
#[1]  1  2  3 15 16 17

哪里

x <- c(1,2,3,8,15,16,17)

答案 1 :(得分:5)

我们保留前一个或下一个差异小于或等于4的值:

v <- c(1,2,3,8,15,16,17)
v[c(FALSE, diff(v) <= 4) | c(diff(v) <= 4, FALSE)]