r - 识别并替换列向量中的重复项

标签 r xts

<分区>

我有两列如下:

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

关于r - 识别并替换列向量中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18129483/

相关文章:

r - 自定义 ML 函数不起作用 : undefined columns selected

windows - 如何将 vbs 脚本的输出返回到 R 控制台?

R:如何跨行应用xts对象?

R: 股票数据xts数据转换后少了一列

r - 从 "lm"和 "glm"对象中获取输入变量名称的向量

arrays - 3d 数组 R 中的 n 个前邻居列表

r - 按句子拆分文本,但不按特殊模式拆分

r - R 向量/数据帧中的基本滞后

r - 一周内的值总和

r - 从 xts 中获取每天前 5 分钟的数据或对其进行子集化