繁体   English   中英

识别并替换列向量中的副本[重复]

[英]Identify and replace duplicate from a column vector [duplicate]

这个问题在这里已有答案:

我有两列如下:

a<- c(1,1,1,2,3,2,2,2,2,1,0,0,0,0,2,3,4,4,1,1)
date<- Sys.Date()-20:1
data<- xts(a,date)
colnames(data)<- "a"
data

在这里我们可以看到有很多重复的元素,即。 他们是重复的。 我想要一个代码,它可以替换所有连续的元素,除了第一个元素外,它们都是0。 我需要的结果是

a<- c(1,0,0,2,3,2,0,0,0,1,0,0,0,0,2,3,4,0,1,0)

我尝试过从早先的帖子中学到的东西

ifelse(data$a == c(data$a[1]-1,data$a[(1:length(data$a)-1)]) , 0 , data$a)

而且我也试过了

data$a<- replace(data$a, duplicated(c(0, cumsum(abs(diff(data$a))))), 0)

但这两个代码都不能用于xts。 虽然上面提到的代码都适用于法向量。

你使用diff进入正确的轨道,但我认为它比你做的更简单:

a[c(F, diff(a) == 0)] <- 0
a
[1] 1 0 0 2 3 2 0 0 0 1 0 0 0 0 2 3 4 0 1 0

编辑

要使此解决方案成为另一个列,您可以通过以下方式分配它:

data$b <- ifelse(c(F, diff(data$a)==0), 0, data$a)

或者通过复制:

data$b <- data$a
data$b[c(F, diff(data$b) ==0)] <- 0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM