我想删除重复的那些,但保留第二个向量中的第一个:
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
分别被删除,并保留该组中的第一组。
我正在尝试将rle
与cumsum
一起使用,但尚未弄明白。任何建议都将不胜感激。
答案 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
}