我有一个整数向量,我想通过消除“孤立”的成分对其进行过滤。 “隔离”是什么意思?那些不位于其他组件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
是我感兴趣的向量,但是逻辑条件存在一些问题。
你能给我一些提示吗?
谢谢。
答案 0 :(得分:6)
您可以结合使用outer
和colSums
,即
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)]