R:删除重复的值并将第一个保留在二进制向量中

时间:2015-12-14 16:23:04

标签: r indexing duplicates

我想删除重复的那些,但保留第二个向量中的第一个:

x = c(0,0,1,1,0,1,0,1,1,1,0,1) # the input 
y = c(0,0,1,0,1,0,1,0,1)     # the desired output

即,第一组和第三组1中的一个1和两个1分别被删除,并保留该组中的第一组。

我正在尝试将rlecumsum一起使用,但尚未弄明白。任何建议都将不胜感激。

5 个答案:

答案 0 :(得分:8)

使用rle / inverse.rle

res <- rle(x)
res$lengths[res$values == 1] <- 1
inverse.rle(res)
## [1] 0 0 1 0 1 0 1 0 1

答案 1 :(得分:8)

我们可以使用diff

x[c(1, diff(x)) == 1 | x == 0]

答案 2 :(得分:4)

x = c(0,0,1,1,0,1,0,1,1,1,0,1)
x[!(x == 1 & #remove each value that is a 1
    c(x[-1] == 1, FALSE) #followed by a 1 (never the case for the last value)
  )]
#[1] 0 0 1 0 1 0 1 0 1

答案 3 :(得分:1)

x = c(0,0,1,1,0,1,0,1,1,1,0,1)
x1 <- rle(x)
x1$lengths[x1$values==1] <- 1
inverse.rle(x1)

答案 4 :(得分:0)

根据矢量大小,您可以遍历它并使用条件将值附加到结果中。这是使用您给定输入的简单解决方案。

x <- c(0,0,1,1,0,1,0,1,1,1,0,1)
prev <- 0
y <- c()
for(i in x){
  if (i == 1){
    if (prev != 1){
      y <- append(y,i)
    }
  }else{
    y <- append(y,i)
  }
  prev <- i
}