No.21292 グループ内連番を作成する方法  【波音】 2014/08/31(Sun) 18:40

あるグループ変数:

## 3グループを表すグループ変数
num <- c(1,1,1,2,2,3,3,3,3)

に対して結果として,

1,2,3, 1,2, 1,2,3,4

というグループ内連番を作りたいのですが・・・

以下のようなベタな書き方しかないものでしょうか?


## 事前にグループ変数を集計しておいて,それを引数に指定する
f <- function(x){
rep.num <- length(x)

for(i in 1:rep.num){

if(i == 1){
res <- 1:x[i]
}else{
tmp <- 1:x[i]
res <- c(res, tmp)
}

}

res
}


【以下は実行例】
> num <- c(1,1,1,2,2,3,3,3,3)
> tbl <- table(num)
> tbl
num
1 2 3
3 2 4
> f(tbl)
[1] 1 2 3 1 2 1 2 3 4

No.21293 Re: グループ内連番を作成する方法  【青木繁伸】 2014/08/31(Sun) 21:18

無理矢理ですが,
unlist(sapply(table(num), function(x) 1:x))
unlist(mapply(":", 1, table(num)))
みたいな...

No.21295 Re: グループ内連番を作成する方法  【波音】 2014/09/01(Mon) 16:19

回答ありがとうございます。
こちら大変,参考になります。

mapplyを使う方がスムーズな気がしますが,(個人的な好みもあるのでしょう)私としてはsapplyを使う方法の方が直感的に分かりやすいようです。

質問ついでの雑談で恐縮ですが,狛犬は神社へ行けばたいてい居ますが,道祖神は道端(?)にちょこんといるものなので,どこに居るか発見するのが大変そうですね。。。

● 「統計学関連なんでもあり」の過去ログ--- 047 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る