在向量中找到连续的相等数据段

时间:2010-04-15 08:23:33

标签: r

我有一个数字向量,它包含重复的元素补丁,如:

R> data <- c(1,1,1,2,2,2,3,3,2,2,2,2,2,3,3,1,1,1,1,1)
R> data
 [1] 1 1 1 2 2 2 3 3 2 2 2 2 2 3 3 1 1 1 1 1
R> 

我需要提取等于特定值的连续元素块...但我只对特定位置的补丁感兴趣。所以,我的输入是:(1)数字向量,(2)期望值,(3)位置。我想返回一个逻辑向量,指示哪些位置满足请求。

如果在该位置数据不等于该值,则返回所有FALSE

不是全部F的可能结果将是:

 [1] 1 1 1 2 2 2 3 3 2 2 2 2 2 3 3 1 1 1 1 1

 [1] T T T F F F F F F F F F F F F F F F F F
 [2] F F F T T T F F F F F F F F F F F F F F
 [3] F F F F F F T T F F F F F F F F F F F F
 [4] F F F F F F F F T T T T T F F F F F F F
 [5] F F F F F F F F F F F F F T T F F F F F
 [6] F F F F F F F F F F F F F F F T T T T T

1 个答案:

答案 0 :(得分:2)

在这里写问题有助于思考解决方案......我发现a related question所以我可以想出这个:

contiguousequal <- function(data, value, position) {
  if(data[position] != value)
    return(rep(FALSE, length(data)))
  id <- cumsum(c(1, as.numeric(diff(data) != 0)))
  id == id[position]
}