2016-10-13 7 views
0

変数の現在の値と前の値とを比較した後、インジケータ変数を作成します。ロジックは次のようなものです:if current value= previous value, then indicator =1,else 0。比較がないため、最初の標識値は切り捨てられます。 それはあなたが最初の値を無視Hmiscパッケージから現在のセルと前のセルとをループなしで比較する

Lagを使用することができます

> dt<-c('a','a','a','b','a','a','c','c') 
> indicator 
[1] NA 1 1 0 0 1 0 1 

答えて

1

あなたはhead()tail()で最後の要素とベクトルの最初の要素を削除し、比較を行う、そしてフロントにNAを追加することができます。

c(NA, as.numeric(head(dt, -1) == tail(dt, -1))) 

dtが数のベクトルであれば、あなたは(ブール値1と0を作るために+0ではなくas.numericを使用。)

dn <- c(1,1,1,2,1,1,3,3) 
c(NA, (diff(dn)==0)+0) 

ようdiffを使用することができ

1

(私は簡単にするためのグループが含まれていませんでした)私は私のデータで比較することがグループの多くを持っているので、高速である必要があります[-1]を追加し、最初にNAを追加します。ベースRを使用して

library(Hmisc) 
c(NA, as.numeric(dt== Lag(dt))[-1]) 

#[1] NA 1 1 0 0 1 0 1 
1

また、使用することができますベースRのrle

v <- rle(dt)[[1]] 
x <- rep(1:length(v),v) 
indicator <- c(NA, (diff(x)==0)*1) 

#[1] NA 1 1 0 0 1 0 1 
  • v:各文字が
  • x
  • 繰り返される回数を取得します: diff
の恩恵を受けるために dtからそれぞれの数値ベクトルが含まれています
関連する問題