0

重複の可能性:データフレーム内のグループ内の行に番号を付ける
複数の出力を持つ関数

G'day、場所ごとにグループ化された個人のリストがあります。場所に応じて各個人に数値を与える新しい変数を作成したいと思います。私のデータをどのように見せたいかは次のとおりです。

place       individual
here        1
here        2
here        3
there       1
there       2
somewhere   1 
somewhere   2

私はこれを書いた:

    nest<-data.frame(location=c("one","one","two", "three", "three", "three"))
    individual<- function(x)
      {
        pp = 1
        jj = 1
        for (i in 2:length(x)){
            if (x[i] == x[pp]){
                res<- jj+1
                pp = pp + 1
                jj = jj + 1
            }
            else{
                res<- 1
                pp = pp + 1
                jj = 1
            }
        }
        return(res)
      }

    test<- individual(nest$location)
    test

これで私が望むことを実行できると確信していますが、複数の結果値を返す方法がわかりません。場所の値ごとに結果を返すようにこの関数を変更するにはどうすればよいですか?または、既存のRパッケージを使用してこれを行う簡単な方法はありますか?

PS補足として、関数をnest $ internal [2]から開始します。これは、関数を1から開始し、前の値(存在しない)を検索しようとするとエラーが返されるためです。誰かがこれを回避する方法について考えているなら、私はそれを聞いてみたいです。乾杯。

4

1 に答える 1

0

ひょっとして、こんなことも…?

ddply(nest,.(location),transform,individual = seq_len(length(location)))
  location individual
1      one          1
2      one          2
3    three          1
4    three          2
5    three          3
6      two          1

(プライヤーパッケージddplyに入っています)

これを行うための巧妙な方法もあると確信してrleいます。確かに、ただの楽しみのために:

do.call(c,lapply(rle(nest$location)[[1]],seq_len))
于 2012-10-31T22:14:05.073 に答える