3

次のような2つの列があります。

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 で機能していません。上記のコードは両方とも法線ベクトルで機能していますが。

4

1 に答える 1

4

あなたは正しい軌道に乗っていましたが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
于 2013-08-08T15:09:32.357 に答える