我想从一个二进制向量中删除重复的元素,但保留第一个。
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
分别被删除,并且保留该组中的第一个。
我正在尝试使用 rle
和 cumsum
,但还没有弄清楚。任何建议都将不胜感激。
我想从一个二进制向量中删除重复的元素,但保留第一个。
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
分别被删除,并且保留该组中的第一个。
我正在尝试使用 rle
和 cumsum
,但还没有弄清楚。任何建议都将不胜感激。
res <- rle(x)
res$lengths[res$values == 1] <- 1
inverse.rle(res)
## [1] 0 0 1 0 1 0 1 0 1
inverse.rle(within(unclass(rle(x)),lengths[values==1]<-1))
将其转换为一行代码。 - nicolawith(rle(x), lengths[values == 1] <- 1)
却不起作用。使用 within
和 unclass
看起来很难阅读。 - David Arenburgdiff
:x[c(1, diff(x)) == 1 | x == 0]
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
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)
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
}
x[ave(x, cumsum(x == 0), FUN = cumsum) <= 1]
- rawr