2013-08-08 1 views
3

에서 중복을 대체 :확인하고 내가 아래로 두 개의 열을 가지고 열 벡터

여기
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으로 중복되고 중복되는 모든 요소를 ​​대체 할 수있는 코드가 필요합니다. 내가 필요 결과는 내가 내 이전 게시물에서

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) 

을 시도했다 해봤

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

하지만 모두 코드 xts에서 작동하지 않습니다. 위에서 언급 한 두 코드 모두 법선 벡터에서 작동하지만.

+0

그래, 같은 질문이지만 벡터에 대한 것이었고 여기에 xts가 필요합니다. –

+4

다른 데이터 구조를 사용하는 방법을 배웁니다. 당신은 같은 질문을하고 있습니다. –

+0

나는 그것을하려고 노력할 것이다. –

답변

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) 

또는 사본을 만들어 :에 의해 할당

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

데이터가 $ b라고 말하는 다른 데이터 열로이 솔루션이 필요한 경우 어떻게해야합니까? 즉. 내 a가 동일하고 다른 b 열이 나에게이 솔루션을 제공하기를 원합니다. –

+0

동일한 시도를했지만 오류 (x, ...)가 발생했습니다 : merge.xts에 하나 이상의 인수가 부적절한 길이 –

+2

왜냐하면'xts' 객체가'diff'의 첫 번째 객체를' NA '이다. 따라서'diff (data $ b, na.pad = F)'를 사용하여 변경하십시오. –