2016-11-07 11 views
1

データ:対象ベクトル内のクラスター化されたグループにラベルを付けるにはどうすればいいですか?

set.seed (112098) 
op <- data.frame(id=1:100,cluster=rbinom(100,1,0.5)) 

id cluster 
1 1 
2 1 
3 1 
4 0 
5 1 
6 1 
7 0 
8 0 
9 1 

は:

id cluster groups 
1 1 1 
2 1 1 
3 1 1 
4 0 0 
5 1 2 
6 1 2 
7 0 0 
8 0 0 
9 1 3 

基本的に、すべての連続した1シリーズは、グループを形成しています。 Rにグループ列を追加するにはどうすればよいですか?ここで

+1

からrleidを使用しているが、クラスタは常に0で埋められていますか? 'rl < - rle(op $ cluster); rl $値< - cumsum(rl $値)* rl $値; op $ groups < - inverse.rle(rl) ' – rawr

+0

@rawrはい、そうです。私はあなたのソリューションが本当に好きです。ありがとう! –

答えて

1

1つのオプションdata.table

library(data.table) 
setDT(op)[, groups := rleid(cluster)*(cluster) 
     ][groups!=0, groups := as.integer(factor(groups))] 
head(op, 9) 
# id cluster groups 
#1: 1  1  1 
#2: 2  1  1 
#3: 3  1  1 
#4: 4  0  0 
#5: 5  0  0 
#6: 6  1  2 
#7: 7  1  2 
#8: 8  0  0 
#9: 9  1  3 
関連する問題